node.js mysql错误:ECONNREFUSED
为什么我不能连接到MySQL服务器?
在同一台服务器上,Apache / PHP服务器正在运行,并且连接没有问题!
var mysql_link = { host : 'localhost', port : 3308, database: 'nodetest', user : 'root', password : 'xxx' }; var connection = mysql.createConnection(mysql_link); connection.connect(function(err){ console.log(err); if(err != null){ response.write('Error connecting to mysql:' + err+'\n'); } }); connection.end();
错误
{ [Error: connect ECONNREFUSED] code: 'ECONNREFUSED', errno: 'ECONNREFUSED', syscall: 'connect', fatal: true }
更新
root@dyntest-amd-6000-8gb /var/www/node/dyntest # ps ax | grep mysqld 7928 pts/0 S+ 0:00 grep mysqld 28942 ? S 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid 29800 ? Sl 17:31 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/lib/mysql/mysql-error.log --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
如果以前有效,我的第一个猜测就是你已经获得了一个在后台运行的node.js脚本的副本,该副本持有连接。
我相信拒绝连接是一个TCP / IP错误消息,而不是从MySQL的东西,这表明它不是运行或正在运行在另一个端口或与套接字。
你可以尝试telnet到端口3308? 要查看服务器是否在该端口上运行?
telnet localhost 3308
你也可以尝试:
mysql -hlocalhost -uroot -pxxx
我知道这个问题已被回答,但对我来说,问题是,MySQL服务器侦听的Unix套接字不在TCP套接字。 所以解决办法是增加:
port: '/var/run/mysqld/mysqld.sock'
到连接选项。
概观
对于有这个问题的人,正在运行MAMP
。 我怀疑这个问题与networking有关,而不是MySQL
或Node.js
解
如果你打开MAMP
并点击左侧导航面板中的MySQL
,它将会popupMySQL选项页面。 在页面的中心,你会看到一个checkbox,
“允许networking访问
MySQL
”。
选中此框,然后重新启动MAMP
。 现在,您可以使用telnet
或node.js
脚本testing您与MySQL的连接。
暗示
请记住,您可以通过打开MAMP
并单击左侧导航面板上的端口链接来检查您的MySQL
正在运行的端口。
视觉辅助
出于一些非常奇怪的原因,我的电脑只允许我的端口3306作为我的连接的默认端口,以使其工作。
我也有这个问题,当我尝试连接和断开很多时间,我通过端连接和运行服务器解决了这个问题,连接closures后,现在我可以连接没有问题
如下 :
mysql.createConnection() connection.end();
服务器运行良好后,从代码中移除connection.end()函数并重新运行服务器