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有关,而不是MySQLNode.js

如果你打开MAMP并点击左侧导航面板中的MySQL ,它将会popupMySQL选项页面。 在页面的中心,你会看到一个checkbox,

“允许networking访问MySQL ”。

选中此框,然后重新启动MAMP 。 现在,您可以使用telnetnode.js脚本testing您与MySQL的连接。

暗示

请记住,您可以通过打开MAMP并单击左侧导航面板上的端口链接来检查您的MySQL正在运行的端口。

视觉辅助

在这里输入图像描述

出于一些非常奇怪的原因,我的电脑只允许我的端口3306作为我的连接的默认端口,以使其工作。

截图

我也有这个问题,当我尝试连接和断开很多时间,我通过端连接和运行服务器解决了这个问题,连接closures后,现在我可以连接没有问题

如下 :

mysql.createConnection() connection.end(); 服务器运行良好后,从代码中移除connection.end()函数并重新运行服务器