Nodejs应用程序无法连接到FreeBSD 8.2-STABLE上的本地MySQL

时间:2014-08-07 12:48:10

标签: mysql node.js freebsd

我使用npm install mysql为node.js安装了MySQL模块,并导致连接错误。

这是我的js代码。

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'user',
  password : 'userpassword',
  database : 'node'
});

connection.connect();

connection.query('SELECT * FROM table', function(err, rows, fields) {
  if (err) throw err;
  console.log('The solution is: ' + fields);
});

connection.end();

这是我得到的输出:

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'node'@'146.66.*.*' (using password: YES)
at Handshake.Sequence._packetToError (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:48:14)
at Handshake.ErrorPacket (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/sequences/Handshake.js:101:18)
at Protocol._parsePacket (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:270:23)
at Parser.write (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Parser.js:77:12)
at Protocol.write (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:39:16)
at Socket.<anonymous> (/usr/local/www/apache22/data/node/node_modules/mysql/lib/Connection.js:82:28)
at Socket.EventEmitter.emit (events.js:95:17)
at Socket.<anonymous> (_stream_readable.js:746:14)
at Socket.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
--------------------
at Protocol._enqueue (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:135:48)
at Protocol.handshake (/usr/local/www/apache22/data/node/node_modules/mysql/lib/protocol/Protocol.js:52:41)
at Connection.connect (/usr/local/www/apache22/data/node/node_modules/mysql/lib/Connection.js:108:18)
at Object.<anonymous> (/usr/local/www/apache22/data/node/local_db.js:9:12)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)

事情是,不是通过localhost连接到MySQL(正如我在连接选项中指定的那样),而是通过externalIPaddress(没有明显的原因),防火墙根据规则丢弃连接。

我在其他主题中搜索过解决方案,但错误输出或合适的解决方案差异很大。

我也尝试过针对其他问题的相关问题的流行解决方案,这是选项列表,对我不起作用: 1.在创建新用户并授予必要权限后刷新MySQL权限表。 2.修改/etc/hosts以从nslookup localhostnslookup localhost.获得正确答案 3.手动指向MySQL套接字的路径也没有改变任何东西。 4.我不同时使用hostserver选项。 我已经尝试了3306端口指定。

毕竟,我仍然得到同样的错误。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

默认mysql绑定并侦听0.0.0.0处的“所有”地址。也许您的node和您的node.js模块正在做同样的事情。这将使请求和响应通过外部接口传递并触发防火墙。

从您的输出我假设node和MySQL在同一台机器上,并且您使用Apache作为反向代理。如果是这种情况,只有httpd应该监听外部地址上的端口:nodemysql等应该通过本地接口或通过套接字相互通信。

检查您的配置,确保nodemysql-server绑定/收听lo界面localhost或[{1}}上的端口。这可以解决您的问题。

HTH,G'Cito