无法将nodejs连接到mysql

无法将nodejs连接到mysql,mysql,node.js,node-mysql,Mysql,Node.js,Node Mysql,我在windows上运行Node.js 0.10.31,在192.168.2.150上运行的virtual box ubuntu上运行我的mySQL 5.5.35。现在,为了将node js连接到mysql,我使用了以下连接器: 代码: var mysql = require('mysql'); var connection = mysql.createConnection({ host : '192.168.2.150', user : 'root', password : '*****',

我在windows上运行
Node.js 0.10.31
,在192.168.2.150上运行的virtual box ubuntu上运行我的
mySQL 5.5.35
。现在,为了将node js连接到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);
});
 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
在my.cnf文件中,绑定地址
为0.0.0.0。此外,在用户表中,我已向所有数据库授予
root@192.168.2.150
。但是,我仍然无法从node连接到mysql,它给出了以下错误。 我甚至尝试过使用NodeJS0.8.2版本,但仍然不起作用。有人能指出错误吗

错误:

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);
});
 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
连接错误:错误:ER\u访问被拒绝\u错误:用户“root”的访问被拒绝@
192.168.2.99'(使用密码:是)
在握手时。顺序。_packetToError(G:\Coding\u Zone\NodeJs\u Work\Output\node
_modules\mysql\lib\protocol\sequences\Sequence.js:48:14)
在Handshake.ErrorPacket(G:\Coding\u Zone\NodeJs\u Work\Output\node\u modules\mys
ql\lib\protocol\sequences\Handshake.js:101:18)
at协议。解析数据包(G:\Coding\u Zone\NodeJs\u Work\Output\node\u modules\mys
ql\lib\protocol\protocol.js:271:23)
在Parser.write(G:\Coding\u Zone\NodeJs\u Work\Output\node\u modules\mysql\lib\pr
otocol\Parser.js:77:12)
在Protocol.write(G:\Coding\u Zone\NodeJs\u Work\Output\node\u modules\mysql\lib\
protocol\protocol.js:39:16)
在Socket.Connection.connect(G:\Coding\u Zone\NodeJs\u Work\Output\node\u模块
\mysql\lib\Connection.js:82:28)
位于Socket.EventEmitter.emit(events.js:88:17)
在TCP.onread(net.js:397:14)
--------------------
在协议中。\u排队(G:\Coding\u Zone\NodeJs\u Work\Output\node\u modules\mysql\l
ib\protocol\protocol.js:135:48)
在Protocol.handshake(G:\Coding\u Zone\NodeJs\u Work\Output\node\u modules\mysql\
lib\protocol\protocol.js:52:41)
在Connection.connect(G:\Coding\u Zone\NodeJs\u Work\Output\node\u modules\mysql\
lib\Connection.js:109:18)
反对。(G:\Coding\u Zone\NodeJs\u Work\Output\mySqlTest.js:9:12)
在模块处编译(Module.js:449:26)
在Object.Module._extensions..js(Module.js:467:10)
在Module.load(Module.js:356:32)
在Function.Module.\u加载(Module.js:312:12)
位于Module.runMain(Module.js:492:10)
在process.startup.processNextTick.process.\u tickCallback(node.js:244:9)
{[Error:ER_ACCESS_DENIED_Error:user'root'的访问被拒绝@'192.168.2.99'(
使用密码:是)]
代码:“ER\u访问被拒绝\u错误”,
errno:1045,
sqlState:'28000',
致命:true}未定义
更新:

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);
});
 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客户端

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

您确定没有禁用根用户(默认情况下通常是禁用的)


简言之,这在我看来并不是节点问题,而是获取正确凭据和配置的问题

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

您确定没有禁用根用户(默认情况下通常是禁用的)


简言之,这在我看来并不是节点问题,而是获取正确凭据和配置的问题

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

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

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

  • 开放式工作台
  • 打开与所属数据库的连接
  • 在左侧的“管理”下,单击“用户和权限”
  • 单击用户帐户列表下方的添加帐户按钮
  • 输入登录名,“主机匹配”到本地主机或您的主机名, 输入密码
  • 转到“架构权限”选项卡,单击“添加条目”按钮,然后单击“确定”。也可以指定用户可以访问的单个数据库
  • 为用户选择所需的权限,如“选择”、“插入”等
  • 单击应用并使用新创建的用户从NodeJ进行连接

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

  • 开放式工作台
  • 打开与所属数据库的连接
  • 在左侧的“管理”下,单击“用户和权限”
  • 单击用户帐户列表下方的添加帐户按钮
  • 输入登录名,“主机匹配”到本地主机或您的主机名, 输入密码
  • 转到“架构权限”选项卡,单击“添加条目”按钮,然后单击“确定”。也可以指定用户可以访问的单个数据库
  • 为用户选择所需的权限,如“选择”、“插入”等
  • 单击应用并使用新创建的用户从NodeJ进行连接

  • 正如@Paul所说的,这不是NodeJS的问题。如果您仔细查看,您正在向用户授予权限root@192.168.2.150(上面写着“用户根从IP 192.168.2.150连接”),但在错误消息中指出:

    Access denied for user 'root'@'192.168.2.99'
    

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

    正如@Paul正确指出的,这不是NodeJS的问题。如果您仔细查看,您正在向用户授予权限root@192.168.2.150(上面写着“用户根从IP 192.168.2.150连接”),但在错误消息中指出:

    Access denied for user 'root'@'192.168.2.99'
    

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

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

    按照jackleekr的建议 我能够使用连接字符串进行连接:

    var-conn