人
我使用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
选项。
我已经尝试了3306端口指定。
毕竟,我仍然得到同样的错误。
提前感谢您的帮助。
答案 0 :(得分:0)
默认mysql
绑定并侦听0.0.0.0
处的“所有”地址。也许您的node
和您的node.js
模块正在做同样的事情。这将使请求和响应通过外部接口传递并触发防火墙。
从您的输出我假设node
和MySQL在同一台机器上,并且您使用Apache作为反向代理。如果是这种情况,只有httpd
应该监听外部地址上的端口:node
,mysql
等应该通过本地接口或通过套接字相互通信。
检查您的配置,确保node
和mysql-server
绑定/收听lo
界面localhost
或[{1}}上的端口。这可以解决您的问题。
HTH,G'Cito