无法将nodejs连接到mysql

时间:2014-09-12 12:08:44

标签: mysql node.js node-mysql

我在Windows上运行Node.js 0.10.31,在192.168.2.150上运行的虚拟机ubuntu上运行mySQL 5.5.35。现在要将节点js连接到mysql,我使用了以下连接器:

https://github.com/felixge/node-mysql

代码:

var mysql = require('mysql');
var connection = mysql.createConnection({
host : '192.168.2.150',
user : 'root',
password : '*****',
port : 3306
});

connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}

console.log('connected as id ' + connection.threadId);
});


connection.query('SELECT 1', function(err, rows) {
// connected! (unless `err` is set)
console.log(err, rows);
});

在my.cnf文件中,bind address为0.0.0.0。此外,在用户表中,我已将所有数据库的权限授予root@192.168.2.150。但是,我仍然无法从节点连接到mysql,它会出现以下错误。 我甚至尝试过Node js 0.8.2版本,但它仍然没有用。任何人都可以指出错误吗?

错误:

 error connecting: Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'
192.168.2.99' (using password: YES)
    at Handshake.Sequence._packetToError (G:\Coding_Zone\NodeJs_Work\Output\node
_modules\mysql\lib\protocol\sequences\Sequence.js:48:14)
    at Handshake.ErrorPacket (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mys
ql\lib\protocol\sequences\Handshake.js:101:18)
    at Protocol._parsePacket (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mys
ql\lib\protocol\Protocol.js:271:23)
    at Parser.write (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\lib\pr
otocol\Parser.js:77:12)
    at Protocol.write (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\lib\
protocol\Protocol.js:39:16)
    at Socket.Connection.connect (G:\Coding_Zone\NodeJs_Work\Output\node_modules
\mysql\lib\Connection.js:82:28)
    at Socket.EventEmitter.emit (events.js:88:17)
    at TCP.onread (net.js:397:14)
    --------------------
    at Protocol._enqueue (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\l
ib\protocol\Protocol.js:135:48)
    at Protocol.handshake (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\
lib\protocol\Protocol.js:52:41)
    at Connection.connect (G:\Coding_Zone\NodeJs_Work\Output\node_modules\mysql\
lib\Connection.js:109:18)
    at Object.<anonymous> (G:\Coding_Zone\NodeJs_Work\Output\mySqlTest.js:9:12)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:244:9)
{ [Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'root'@'192.168.2.99' (
using password: YES)]
  code: 'ER_ACCESS_DENIED_ERROR',
  errno: 1045,
  sqlState: '28000',
  fatal: true } undefined

更新:

我也尝试过与其他用户一起尝试并在数据库中授予他们完全权限。但仍然无法解决错误。 但奇怪的是我能够连接mysql客户端

7 个答案:

答案 0 :(得分:7)

正如@Paul所说,这不是NodeJS的问题。如果仔细观察您正在授予用户root@192.168.2.150(表示&#34;用户root连接IP 192.168.2.150&#34;)的权限,但是出现错误消息:

Access denied for user 'root'@'192.168.2.99'

尝试为运行NodeJS实例的IP(192.168.2.99)授予root权限,并且它应该可以正常工作。

答案 1 :(得分:1)

您是否尝试使用MySQL客户端中的相同信息进行连接?

您确定root用户是否已被禁用(因为它通常是默认情况下)?

简而言之,对我来说这看起来不像Node问题,但是获得正确的凭据和配置是一个问题。

答案 2 :(得分:1)

添加我的输入,因为它可能会帮助其他人。我遇到了同样的问题,以下步骤解决了这个问题。

  1. 打开WorkBench
  2. 打开与您所在数据库的连接。
  3. 左侧,在管理下,单击“用户和权限”。
  4. 点击“用户帐户”列表下方的“添加帐户”按钮。
  5. 输入登录名,'host matching'到localhost或您的主机名, 输入密码。
  6. 转到“架构权限”选项卡,单击“添加条目”按钮,然后单击“确定”。 (可选)您可以指定用户可以访问的单个数据库。
  7. 为用户选择所需的权限,例如“选择”,“插入”等
  8. 单击“应用”并使用新创建的用户从Nodejs进行连接。

答案 3 :(得分:1)

我遇到了同样的问题,我尝试了上面列出的其他解决方案。

遵循https://github.com/mysqljs/mysql/issues/250#issuecomment-7153315 jackleekr 的建议 我能够使用连接字符串进行连接:

var conn = mysql.createConnection('mysql://root:*******@localhost:3306/company?debug=true');

答案 4 :(得分:0)

命令提示符运行时权限有限。取消选中“命令提示符”快捷方式中的相应框,它可以正常工作。我昨天遇到了这个问题。

答案 5 :(得分:0)

尝试将端口号更改为3307

php bin/console assetic:dump --env=prod

它对我有用

答案 6 :(得分:0)

我也遇到同样的情况,其他答案也无济于事,问题是数据库的连接数量-默认情况下为零。您应该更改它。 步骤:

  1. 打开WorkBench
  2. 打开与您的数据库所属的连接。
  3. 在管理下,单击左侧的“用户和特权”。
  4. 转到帐户限额。
  5. 根据需要更改并发连接。

enter image description here