【问题标题】:Unable to Connect to MySQL via Nodejs无法通过 Nodejs 连接到 MySQL
【发布时间】:2014-10-18 13:18:10
【问题描述】:

我已经安装了 Node.js 如下:

root@server1:~#apt-get install nodejs

然后安装npm如下:

root@server1:~#apt-get install npm

然后在服务器目录中安装 MySQL 模块,如下所示:

root@server1:~#cd /var/www/
root@server1:/var/www# npm install mysql

以下是 node.js 服务器 (server.js) 的代码(使用正确的凭据而不是 xxx):

var mysql = require('mysql');

var db_config = {
    host      : 'localhost',
    user      : 'xxx',
    password  : 'xxx',
    database  : 'xxx'
};

var connection;

function handleDisconnect(){

    connection = mysql.createConnection(db_config);


    connection.connect(function(err) {
        if(err) {
            console.log('error when connecting to db:', err);
            setTimeout(handleDisconnect, 2000);
        }
    });

    connection.on('error', function(err) {
        console.log('db error', err);
        if(err.code === 'PROTOCOL_CONNECTION_LOST') {
            handleDisconnect();
        }
        else{
             throw err;
        }
    });
 }

 handleDisconnect();   

当我像下面这样运行 Node.js 服务器时:

root@server1:~#node /var/www/server.js

我收到一般错误!如下:

error when connecting to db: { [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect',
fatal: true }

更新:

我能够从 PHP (Apache2) 连接到 MySQL,并且 MySQL 在我的 Ubuntu 12.04 服务器上运行良好,如下所示:

root@server1:~# netstat -ltnp | grep 3306

输出:

tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      556/mysqld

您能告诉我如何解决这个问题吗? Node.js 在不同的服务器上工作,但我不知道为什么它不能在这里工作!

谢谢。

【问题讨论】:

  • 您可以从另一台服务器连接的事实表明您的用户设置不正确。 MySQL 用户通常按主机设置(或 * 用于所有主机)。检查是否有用户可以从运行您的节点应用程序的服务器的 IP 访问
  • 如果你运行netstat -nlp,你看到mysql服务器运行在3306上吗?如果没有,您也可以将socketPath 设置为unix 套接字的路径,而不是设置host
  • 我能够从 Apache2 连接到 MySQL,并且 MySQL 工作正常。我想知道为什么它不能与 Node.js 一起使用,我无法理解他们只有一般错误的错误。谢谢你的帮助。我已经用 netstat 输出更新了帖子
  • 你用的是什么版本的node、npm和mysql?

标签: mysql node.js


【解决方案1】:

您需要将socket path 的值添加到db_config 对象中:

db_config.socketPath =  '/var/run/mysqld/mysqld.sock'

例如在 MAMP 中,你转到 http://localhost:8888/MAMP,你会发现:

/Applications/MAMP/tmp/mysql/mysql.sock

最后你有:

var connection = mysql.createConnection({
  host     : db_config.host,
  user     : db_config.user,
  password : db_config.pass,
  database : db_config.db,
  socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock'
});

【讨论】:

  • 感谢这个。真的有帮助
猜你喜欢
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 2014-11-25
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多