node-mysql错误:连接ECONNREFUSED

时间:2014-04-07 23:23:46

标签: mysql node.js nginx node-mysql

我正在尝试使用node-mysql在我的数据库服务器和客户端节点应用之间建立远程连接。

当我尝试连接到远程数据库时,出现此错误:

node.js:201
    throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: connect ECONNREFUSED
    at errnoException (net.js:646:11)
    at Object.afterConnect [as oncomplete] (net.js:637:18)

连接到本地数据库工作正常(使用socketPort参数)。

我可以使用PHP从我的计算机localhost以及我拥有的另一台服务器连接到这个远程数据库,所以我认为mysql conf没有问题。

有关信息,nodejs正在运行nginx并且我已经设置了一个代理以使节点在端口80上工作,这可能是问题吗?

我该怎么检查?

感谢。

修改

这是我的代码,以防万一:

var express = require('express');
var mysql = require('mysql');
var app = express();
var connection = mysql.createConnection({
    debug: false,
    host: '12.34.56.67',
    user: 'user',
    password: 'pass'
});

7 个答案:

答案 0 :(得分:18)

尝试使用mysql socket:

var connection = mysql.createConnection({
    user: 'user',
    password: 'pass',
    socketPath: 'mysql-socket-path', /*example: /Applications/MAMP/tmp/mysql/mysql.sock*/
    database: 'dbname'
});

答案 1 :(得分:7)

如果仍有人寻找答案:

检查MySql服务器的配置。

在我的情况下,运行netstat -ln | grep mysql(根据Troubleshooting Problems Connecting to MySQL)显示我的服务器正在侦听套接字/tmp/mysql.sock,因此在我使用的createConnection选项中socketPath: '/tmp/mysql.sock'代替host:port:

答案 2 :(得分:2)

此错误与MySQL客户端无法连接到host:port给定的错误有关。如errno.h中所定义,ECONNREFUSED是拒绝连接时引发的错误 - 这可能是由以下原因引起的:

  • 防火墙,例如iptables阻止端口
  • 端口上没有运行此类进程
  • 该进程在其他主机上运行
  • 主机或端口不正确

在我的情况下,我的MySQL服务器未正确绑定到0.0.0.0用于外部连接,而是绑定到127.0.0.1,因为它是默认情况下;但是you can change this

错误不是来自node-mysql包,而堆栈跟踪是双重显示的,只显示来自net.js的错误。

答案 3 :(得分:1)

好的,所以我查看了node-mysql dev,看起来它不是一个node-mysql错误,但是很难调查更多。

无论如何,我发现这个lib有效,所以我会选择它。

https://github.com/mariano/node-db-mysql

答案 4 :(得分:0)

我有同样的问题。 通过在createConnection函数选项中设置正确的端口来解决它。

使用以下命令获取您的端口: netstat -tlnp

搜索程序名称mysqld或仅命名。

答案 5 :(得分:0)

我添加了端口:3306,该问题得以解决。

var connection = mysql.createConnection
    ({
        user: 'root',
        password: 'root',
        server: 'localhost',
    port:3306,
        database: 'abcd',
        insecureAuth: true,
        dialect: 'mysql',   
        multipleStatements: true,
        pool: {
            max: 5,
            min: 0,
            acquire: 30000,
            idle: 10000
        }
    });

    connection.connect();

答案 6 :(得分:0)

使用命令:纱线运行开始,并且不要使用:cd / folderX &&纱线运行开始