2017-07-28 117 views
0

我找不出为什么脚本无法连接到MySQL实例。为什么节点脚本无法通过本地主机连接到MySQL

我可以在命令行上使用完全相同的凭据从mysql客户端连接到数据库。 我可以使用相同的凭据从远程客户端连接到数据库。

如果我将参数设置为远程数据库,数据库连接脚本可以正常工作。

主机或套接字参数不通过脚本工作。 我有时犯了愚蠢的错误,但如果这是另一个,我看不到它。

一位外部观察员会帮助我。

==================== DB连接代码

var db = require('./config'); 
var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    host: db.db_parms.host, 
    port: db.db_parms.port, 
    user: db.db_parms.user, 
    password: db.db_parms.password, 
    database: db.db_parms.context, 
    debug:true 
}); 

connection.connect(function(err) { 
    if(err){ 
     console.log("SQL CONNECT ERROR: " + err); 
    } else { 
     console.log("SQL CONNECT SUCCESSFUL."); 
    } 
}); 

connection.query("SELECT now()", function(error,results,fields) { 
    console.log("Results:" + results); 
    console.log("Fields:" + fields); 
}); 


exports.connection = connection; 

===错误堆栈返回:

SQL CONNECT ERROR: Error: connect ECONNREFUSED 127.0.0.1:3307 
    at Object.exports._errnoException (util.js:1036:11) 
    at exports._exceptionWithHostPort (util.js:1059:20) 
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14) 
    -------------------- 
    at Protocol._enqueue (/home/kingram/node/apps/fss_register/node_modules/mysql/lib/protocol/Protocol.js:141:48) 
    at Protocol.handshake (/home/kingram/node/apps/fss_register/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
    at Connection.connect (/home/kingram/node/apps/fss_register/node_modules/mysql/lib/Connection.js:130:18) 
    at Object.<anonymous> (/home/kingram/node/apps/fss_register/db/db_connect.js:19:12) 
    at Module._compile (module.js:556:32) 
    at Object.Module._extensions..js (module.js:565:10) 
    at Module.load (module.js:473:32) 
    at tryModuleLoad (module.js:432:12) 
    at Function.Module._load (module.js:424:3) 
    at Module.runMain (module.js:590:10) 

== =======与主机config.js = 'localhost' 的:

var db_parms = { 
host: 'localhost', 
port: 3307, 
user:'foo', 
password:'bar', 
database:'thisone' 
} 

exports.db_parms = db_parms; 

与主机=插座========= config.js:

host: '/var/run/mysqld/mysqld.sock', 

===错误堆栈返回:

SQL CONNECT ERROR: Error: getaddrinfo ENOTFOUND /var/run/mysqld/mysqld.sock /var/run/mysqld/mysqld.sock:3307 
    at errnoException (dns.js:28:10) 
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26) 
    -------------------- 
    at Protocol._enqueue (/home/kingram/node/apps/fss_register/node_modules/mysql/lib/protocol/Protocol.js:141:48) 
    at Protocol.handshake (/home/kingram/node/apps/fss_register/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
    at Connection.connect (/home/kingram/node/apps/fss_register/node_modules/mysql/lib/Connection.js:130:18) 
    at Object.<anonymous> (/home/kingram/node/apps/fss_register/db/db_connect.js:19:12) 
    at Module._compile (module.js:556:32) 
    at Object.Module._extensions..js (module.js:565:10) 
    at Module.load (module.js:473:32) 
    at tryModuleLoad (module.js:432:12) 
    at Function.Module._load (module.js:424:3) 
    at Module.runMain (module.js:590:10) 

我不知道,如果从插槽中的错误是权限问题或不和,如果这是相关的。

回答

-1

验证您的配置文件,如果你正在使用的端口是3306,而不是3307默认情况下,MySQL服务使用的端口号3306

+1

还检查MySQL服务器是否真的启动,使用'mysql'命令行util来测试。 – Populus

+0

正如我在我的问题中指出的,除了通过脚本之外,我可以用任何方式连接到数据库。 –

0

事实证明,的my.conf显示的是支票bind-addresss被设置为服务器的IP而不是localhost。

设置host: '<ip-address>'修复了这个问题。

相关问题