无法将nodejs连接到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客户端

正如@Paul所说的,这不是NodeJS的问题。 如果你仔细看看你正在授权给用户root@192.168.2.150(它说“用户root从IP 192.168.2.150连接”),但在错误信息是说:

 Access denied for user 'root'@'192.168.2.99' 

尝试给你的根权限,您的NodeJS实例正在运行的IP(192.168.2.99),它应该工作。

你有没有尝试在MySQL客户端使用相同的信息连接?

你确定root用户没有被禁用(因为它通常是默认情况下)?

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

添加我的input,因为它可能帮助其他人。 我面临同样的问题,下面的步骤解决了它。

  1. 打开WorkBench
  2. 打开你的数据库所属的连接。
  3. 左侧,在pipe理下,单击用户和权限。
  4. 点击用户帐户列表下面的添加帐户button。
  5. inputlogin名,主机匹配到本地主机或您的主机名,input密码。
  6. 转到模式权限选项卡,单击添加条目button,然后单击确定。 您也可以指定用户可以访问的单个数据库。
  7. 为用户select所需的权限,如“select”,“插入”等
  8. 点击Apply并使用新创build的用户从Nodejs连接。

我有同样的问题,我尝试了上面列出的其他解决scheme。

根据https://github.com/mysqljs/mysql/issues/250#issuecomment-7153315上&#x7684;jackleekr的build议,我能够使用连接string进行连接:

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

命令提示符运行的权限有限。 取消select命令提示符快捷方式中的相应框,它可能正常工作。 我昨天有这个问题。