无法连接MySQL数据库,获得ECONNREFUSED

时间:2017-06-12 14:02:51

标签: javascript mysql node.js

我尝试通过MySQL Java Script连接数据库,如下所示:

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

我正在使用Node执行,当我执行上述程序时收到以下错误消息:

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)并且能够获得响应。可以帮我连接数据库。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并通过添加socketPath参数解决了错误

SELECT 
    [Transaction Montly Query].Month, 
    [Transaction Montly Query].[Total Weight], 
    [Transaction Montly Query].[Total Transactions], 
    Format$(([Total Weight]/[Total Transactions]),'#.00') AS [Weight per Transaction], 
    [Unique Customer Query].[Unique Customers], 
    Format$(([Total Weight]/[Unique Customers]),'#.00') AS [Weight per Costomer], 
    Format$(([Total Transactions]/[Unique Customers]),'#.00') AS [Transactions per Customer]
FROM [Transaction Montly Query] 
    RIGHT JOIN [Unique Customer Query] 
        ON [Transaction Montly Query].Month = [Unique Customer Query].Month
GROUP BY 
    [Transaction Montly Query].Month, 
    [Transaction Montly Query].[Total Weight], 
    [Transaction Montly Query].[Total Transactions], 
    [Unique Customer Query].[Unique Customers]
ORDER BY [Transaction Montly Query].Month;

答案 1 :(得分:0)

我强烈建议您创建一个connectionPool来保存资源。我是这样做的:

//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方法(异步来自蓝鸟宣传方法),并使用query方法(异步' d),然后最终释放连接回到池。这有助于避免因未关闭的TCP连接导致的内存泄漏。

如果您已经从默认的MySQL端口更改了端口,请确保也指定端口。