伙计们。
我已经使用 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 localhost
和 nslookup localhost
获取正确答案。
3.手动指向MySQL套接字的路径也没有改变任何东西。
4. 我没有同时使用 host
和 server
选项。
5.我尝试过指定3306端口。
毕竟,我仍然遇到同样的错误。
提前感谢您的帮助。
最佳答案
默认情况下mysql
绑定(bind)并监听0.0.0.0
处的“所有”地址。也许您的 node
和您的 node.js
模块正在做同样的事情。这将使请求和响应通过您的外部接口(interface)发送并触发您的防火墙。
根据您的输出,我假设 node
和 MySQL 在同一台计算机上,并且您使用 Apache 作为反向代理。如果是这种情况,则只有 httpd
应该监听外部地址上的端口:node
、mysql
等应该通过以下方式相互通信本地接口(interface)或通过套接字。
检查您的配置并确保node
和mysql-server
正在绑定(bind)/监听lo
接口(interface)上的端口,localhost
或 127.0.0.1
。这可以解决您的问题。
HTH,G'Cito
关于mysql - Nodejs 应用程序无法在 FreeBSD 8.2-STABLE 上连接到本地 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25182967/