2014-04-07 152 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的選項

相關問題