2017-06-12 87 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端口更改。