2014-09-12 113 views
1

我在windows上运行Node.js 0.10.31,在192.168.2.150上运行的虚拟机ubuntu上运行我的mySQL 5.5.35。现在节点JS连接到MySQL我已经使用以下连接器:无法将nodejs连接到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。此外,在用户表中,我已将所有数据库的权限授予[email protected]。但是,我仍然无法从节点连接到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客户端

+0

你解决这个问题?如果是的话,请选择一个答案。 – codecowboy 2015-11-22 09:56:55

回答

7

正如@Paul声明的那样,它不是NodeJS的问题。如果你仔细看看你正在授予用户[email protected](它说“用户root从IP 192.168.2连接。150" ),但在错误消息指出:

Access denied for user 'root'@'192.168.2.99' 

尝试对IP的超级用户权限在您的NodeJS实例运行(192.168.2.99),它应该工作

+0

嗨,我使用的是goDaddy MySQL数据库,并且我已经授予了我的IP地址的权限,事实上我已经通过%通配符来授予访问数据库的任何IP的权限,但它仍然向我显示上面提到的相同错误@Naresh 。错误:ER_ACCESS_DENIED_ERROR:访问被拒绝用户'user-portal'@'1.186.37.68'(使用密码:YES) – codeinprogress 2016-09-07 06:51:20

+0

@codeinprogress看起来像您的凭据不正确(假设设置和IP地址是正确的) – JakubKnejzlik 2016-09-07 08:36:45

1

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

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

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

+0

我也曾与其他用户一起尝试过,并授予他们在数据库中的完全权限。但仍然无法解决错误。此外,我能够连接到MySQL客户端。 – Naresh 2014-09-12 13:49:09

+1

你在MySQL日志中得到了什么有用的东西吗?它看起来像你在一个Windows机器上,有可能访问被拒绝的错误是由你的防火墙在端口3306上屏蔽了一个块;您可以通过查看您的mysql日志来确定是否从其角度来看登录尝试。最后,你的MySQL设置本身(不是用户,设置)可能只允许本地主机访问,在这种情况下,主机值192.168.2.150将不起作用,即使这是本地主机的IP。 – Paul 2014-09-12 15:22:45

0

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

1

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

  1. 打开工作台
  2. 打开到数据库的连接所属。
  3. 左侧,在管理下,单击用户和特权。
  4. 单击添加帐户按钮,正下方的用户帐户列表。
  5. 输入登录名,'主机匹配'到本地主机或您的主机名, 输入密码。
  6. 转到模式权限选项卡,单击添加条目按钮并单击确定。您也可以指定用户可以访问的单个数据库。
  7. 为用户选择所需的权限,如“选择”,“插入”等。
  8. 单击应用并使用新创建的用户从Nodejs进行连接。
+0

这没有为我工作。 – 2017-08-30 17:16:47

0

尝试通过改变端口号3307

var mysql = require('mysql'); 

var connection = mysql.createConnection({ 

    host : '192.168.2.150', 
    user : 'root', 
    password : '*****', 
    port : 3307 

}); 

connection.connect(function(error) { 
    if(error) throw error; 
    console.log("Connected to database"); 
}); 

它为我