遇到一个Nodejs中的mysql连接问题,太奇怪了。
遇到一个Nodejs中的mysql连接问题,太奇怪了。
系统centos,确认root有密码,host为%,命令行中mysql -u root -p可以正常登录,局域网机器可以。
var mysql = require('mysql');
var conn = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'xxxxx'
(隐去)
});
conn.connect(function (err) {
if (err) console.log('connection error:', err);
});
运行上述代码就报错,把localhost换成.或者ip,都是相同的错误,求解释~
{ [Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: NO)]
code: 'ER_ACCESS_DENIED_ERROR',
errno: 1045,
sqlState: '28000',
fatal: true }
遇到一个Node.js中的MySQL连接问题,太奇怪了
背景信息
我在CentOS系统上使用Node.js连接MySQL数据库时遇到了一些问题。我已经确认MySQL的root
用户有密码,并且可以通过命令行使用mysql -u root -p
正常登录。此外,局域网内的其他机器也可以正常访问。
代码示例
以下是我在Node.js中尝试连接MySQL的代码:
var mysql = require('mysql');
var conn = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'xxxxx' // 这里隐去了实际的密码
});
conn.connect(function (err) {
if (err) console.log('connection error:', err);
});
错误信息
运行上述代码后,我收到了以下错误信息:
{
[Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'localhost' (using password: NO)]
code: 'ER_ACCESS_DENIED_ERROR',
errno: 1045,
sqlState: '28000',
fatal: true
}
问题分析与解决方案
从错误信息来看,问题在于MySQL认为我没有提供正确的密码,尽管我在连接配置中明确指定了密码。具体错误信息中的 (using password: NO)
表明在尝试连接时没有使用密码。
可能的原因:
- 密码设置问题: 确保在连接字符串中使用的密码与MySQL数据库中设置的密码完全一致。
- 配置文件问题: 检查是否有其他配置文件覆盖了密码设置。
- 权限问题: 确认
root
用户在localhost
上的权限设置是否正确。
解决方案:
-
检查密码: 确认密码是否正确,可以在命令行中再次验证:
mysql -u root -p
输入密码后如果能够成功登录,说明密码是正确的。
-
使用完整路径: 如果仍然有问题,可以尝试使用完整的主机名或IP地址:
var conn = mysql.createConnection({ host : '127.0.0.1', // 或者你的实际IP地址 user : 'root', password : 'xxxxx' });
-
检查权限: 登录到MySQL并检查
root
用户的权限设置:SELECT User, Host FROM mysql.user;
确保
root
用户在localhost
上有正确的权限。
通过以上步骤,你应该能够解决这个问题。如果仍然无法解决,请提供更多详细信息以便进一步诊断。
已解决,是版本问题,node-mysql2.1.0降级为2.0.1就好了,看来要指定版本安装了。
建议不要用root连数据库,可以新建用户连数据库。
奇怪了…我这里倒是很正常…
谢谢提醒,这里只做测试使用~
的确很奇怪,我用command line毫无问题,确定是库的原因,我也不知道啥情况~
升级 mysql 包的确解决了问题。
目前我用到的是mysql 2.15.0版本,也是有这个问题,希望有人能帮忙解决.