2017-06-12 84 views
0

我試圖通過MySQL的Java腳本來連接數據庫如下:無法連接MySQL數據庫,得到ECONNREFUSED

var mysql = require('mysql'); 
var con = mysql.createConnection({ 
    host: "******", 
    user: "******", 
    password: "******" 
}); 
con.connect(function(err) { 
if (err) throw err; 
    console.log("Connected!"); 
}); 

而且我使用節點來執行,當我執行上述程序提示以下錯誤:消息:

if (err) throw err; 
    ^
Error: connect ECONNREFUSED XX.XXX.XX.XXX:3306 
    at Object.exports._errnoException (util.js:1018:11) 
    at exports._exceptionWithHostPort (util.js:1041:20) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1086:14) 

此外,我ping我的IP地址(ping XX.XXX.XX.XXX),並能夠得到響應。可以幫助我連接數據庫。

+0

您的憑據是否正確? – Li357

+0

是的,通過SQL Developer我可以連接... – KAK

+0

您的主機必須是您的本地IP地址,例如:127.0.0.1(只有在您的機器上安裝了Mysql) – Alexandre

回答

0

我有同樣的問題和錯誤通過添加socketPath參數

var connection = mysql.createConnection({ 
    user: 'user', 
    password: 'pass', 
    socketPath: '/var/run/mysqld/mysqld.sock', 
    database: 'dbname' 
}); 
+0

感謝您的評論,但我怎麼找到我的socketPath? – KAK

+0

你使用哪個操作系統? – geo

+0

我使用Windows 7 – KAK

0

我強烈建議創建一個連接池,以節約您的資源解決。下面是我做的:

//import settings.js 
const db_config = { 
    hostname : "localhost", 
    user : settings.user, //username 
    password : settings.password, //password 
    database : settings.database //db 
} 

//create db connection pool 
const con = mysql.createPool(db_config); 

所以下一步就是使用該連接池!不要害怕這段代碼的異步/藍鳥性質,它只是我如何構建它的。

async function query(sql, params) { 
    const connection = await con.getConnectionAsync(); 
    return connection.queryAsync(sql,params) 
     .then(rows => rows) 
     .finally(() => connection.release()); 
} 

這斂連接getConnection方法(異步是從藍鳥promisifying的方法),以及使用該方法query(async'd),然後最終釋放連接回池中。這可以幫助您避免由未關閉的TCP連接導致的內存泄漏。

確保您還指定端口,如果您已將其從默認的MySQL端口更改。