2014-04-07 135 views
4

我试图使用node-mysql在我的数据库服务器和客户机节点应用程序之间建立远程连接。node-mysql错误:连接ECONNREFUSED

当我尝试连接到远程数据库,我得到这个错误:

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参数)。

我可以从我的电脑本地主机连接到这个远程数据库与我的电脑本地主机以及另一台服务器我拥有,所以我不认为这是错误的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' 
}); 
+0

你可以得到MySQL的发送错误代码监听到node-mysql? – Erico

+0

是的它: {[错误:连接ECONNREFUSED] 代码: 'ECONNREFUSED', 错误号: 'ECONNREFUSED', 系统调用: '连接', 致命的:真正} – Skoua

+0

相信插件无法正确显示的错误。我会把这个发送给插件开发人员,看他们是否可以显示Mysql错误代码和消息。 ECONNREFUSED并不多说,可能是几件事情。 – Erico

回答

1

好了,所以我检查淋巴结MySQL的开发,似乎它不是一个节点mysql的错误,但它是很难调查更多。

无论如何,我发现这个lib工作,所以我会去用它。

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

+0

我有这个确切的问题,并没有设法解决它。切换到DB-DB的东西解决了它。 – tripRev

+1

看起来像node-mysql最新版本修复了这个问题。至少它适用于我的v2.2.0 – Skoua

13

尝试使用MySQL的插座:

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

谢谢。这解决了我的问题! – Ben

+0

很高兴听到这个,它解决了你的问题! @Ben :) –

1

这个错误与不能够连接到给定host:port MySQL客户端做的。如图errno.h定义,ECONNREFUSED是当一个连接被拒绝时引发错误 - 这可能是由引起:

  • 防火墙如iptables阻塞端口
  • 的端口上运行没有这样的过程
  • 进程正在运行在不同的主机
  • 在主机或端口是不正确的

就我而言,我的MySQL服务器不正确绑定到0.0.0.0用于外部连接,而不是绑定到127.0.0.1,因为它是默认的;然而you can change this

错误不是源于node-mysql包,如堆栈跟踪双重显示的那样,它只显示来自net.js的错误。

+1

防火墙会导致连接超时。有一个防火墙在二十年前发布了拒绝,但很快就认识到这是一个安全漏洞,因为它揭示了主机和端口的存在。你的第四点包含你的第二点和第三点。 – EJP

0

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

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

搜索程序名称的mysqld或刚刚任命。

5

还应该找一个答案:

检查您的MySql服务器的配置。

在我的情况下运行netstat -ln | grep mysql(按Troubleshooting Problems Connecting to MySQL)透露,我的服务器套接字/tmp/mysql.sock上所以我用socketPath: '/tmp/mysql.sock'代替host:port:createConnection的选项

相关问题