felixge / node-mysql没有连接到数据库

时间:2011-11-27 14:08:08

标签: javascript mysql node.js database-connection

我通过npm(npm install mysql)安装了felixge/node-mysql,现在我想连接到mysql数据库,但每次我尝试连接时都会发生此错误:

{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }
undefined

我的nodejs来源:

var mysql = require("mysql")
var db = mysql.createClient({
    host:"localhost",
    user:"root",
    password:"root"
});

db.query("SELECT 1",function(err,result,fields){
    if(err) {
        console.log(err);
    }
    console.log(result);
});

但我可以通过命令行轻松访问我的MySQL数据库:

[user@host] $ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.18-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SELECT 1
    -> ;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.00 sec)

mysql> 

有人可以帮我解决我的错误吗?

4 个答案:

答案 0 :(得分:4)

您需要设置socketPath

mysql = require('mysql');
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'password',
    socketPath  : '/var/run/mysqld/mysqld.sock',

});

答案 1 :(得分:2)

我不得不修改mysql配置文件。我评论了skip-networking并解决了我的问题。

如果有人能解释我为什么这么好,我会感谢它。

答案 2 :(得分:1)

我在MacOSX上使用MAMP,记得添加这个

“socketPath”:“/ Applications / MAMP / tmp / mysql / mysql.sock”

{
    "host": "localhost",
    "port": 3306,
    "user": "nodejs",
    "password": "nodejs",
    "database": "crawler",
    "socketPath": "/Applications/MAMP/tmp/mysql/mysql.sock"
}

答案 3 :(得分:0)

使用node-mysql连接mysql时,需要指定主机名。如果您使用的是linux,则可以使用以下命令找到: hostname

所以你知道,我有同样的问题我可以通过命令行连接到mysql而不指定主机名但在节点中你需要更改它。至少在我的情况下。 (v0.4.10)为什么?我不确定,也许别人有个主意。

var mysql = require("mysql")
var db = mysql.createClient({
    host: --- put what you got from the hostname command ---,
    user:"root",
    password:"root"
});