node.js mysql错误:ECONNREFUSED

时间:2014-01-18 16:35:40

标签: mysql node.js

为什么我无法连接到mysql服务器?

在同一台服务器上运行Apache / PHP服务器并且连接没有问题!?

var mysql_link = {
    host : 'localhost',
    port : 3308,
    database: 'nodetest',
    user : 'root',
    password : 'xxx'
};

var connection = mysql.createConnection(mysql_link);

connection.connect(function(err){
    console.log(err);
    if(err != null){
        response.write('Error connecting to mysql:' + err+'\n');
    }
});

connection.end();

错误

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

更新

root@dyntest-amd-6000-8gb /var/www/node/dyntest # ps ax | grep mysqld
 7928 pts/0    S+     0:00 grep mysqld
28942 ?        S      0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid
29800 ?        Sl    17:31 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/lib/mysql/mysql-error.log --open-files-limit=65535 --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

8 个答案:

答案 0 :(得分:30)

我知道这个问题已经得到解答,但对我来说问题是mysql服务器监听的是不在tcp套接字上的Unix套接字。所以解决方案是添加:

port: '/var/run/mysqld/mysqld.sock'

连接选项。

答案 1 :(得分:7)

如果之前有效,我的第一个猜测是你已经获得了在后台运行的node.js脚本的副本。

我认为连接被拒绝是一个tcp / ip错误消息,而不是来自MySQL的东西,它表明它没有运行或正在另一个端口或套接字上运行。

你能试试telnet到3308端口吗?要查看服务器是否在该端口上运行?

telnet localhost 3308

你还可以尝试:

mysql -hlocalhost -uroot -pxxx

答案 2 :(得分:7)

<强>概述

对于遇到此问题但正在运行的其他人。我怀疑问题与网络有关,而不是MySQLNode.js

<强>解决方案

如果您打开MAMP并单击左侧导航面板中的MySQL,它将打开MySQL选项页面。在页面中央,您会看到一个复选框,上面写着

  

“允许网络访问MySQL”。

选中此框,然后重新启动MAMP。此时,您现在可以使用telnetnode.js脚本测试与MySQL的连接。

提示

请注意,您可以通过打开port并点击左侧导航面板上的端口链接来查看运行MySQL的{​​{1}}。

视觉辅助

enter image description here

答案 3 :(得分:0)

由于一些非常奇怪的原因,我的计算机只允许我将端口3306作为我的连接的默认端口,以使其工作。

Screenshot

答案 4 :(得分:0)

当我尝试连接和断开多次时,我也有这个问题, 我通过端连接和运行服务器解决了这个问题,在连接关闭后,现在我可以连接而没有问题

如下:

mysql.createConnection() connection.end(); 在服务器运行良好之后,从代码中删除connection.end()函数并重新运行服务器

答案 5 :(得分:0)

我想在这里评论我的解决方案,以防万一数据库中有像我这样的新手。

我收到此错误是因为我已经正确安装了mysql NPM软件包,但是我没有在计算机上安装任何MySQL实现(我不知道我必须)。

我使用的是Arch Linux,因此,在我的项目中已经安装了NPM软件包的情况下,我做了pacman -Syu mariadb(MariaDB是Arch Linux中MySQL的default implementation),然后进行了配置它紧跟guide

然后,您可以使用刚刚配置的root用户,也可以创建一个新用户在项目中使用。对于后者:

  • 通过运行mysql进入mysql -u root -p CLI。

  • 输入root用户的密码。

  • Create a new databaseCREATE DATABASE mydatabase;

  • Create a new userCREATE USER test IDENTIFIED BY "testpass";

  • 授予test用户以使用GRANT ALL PRIVILEGES ON mydatabase.* TO test@localhost IDENTIFIED BY "testpass";的新数据库的特权。 See以获得更多信息。

然后,在我的项目中,我会:

let connection = mysql.createConnection({
    host: "localhost",
    user: "test",
    password: "testpass",
    database: "mydatabase"
});

答案 6 :(得分:0)

如果您使用 MAMP,请注意 mysql 默认 db_port 设置为 8889,因此您为此目的我必须将其更改为 3306(或您的应用程序 mysql db_port 设置为的任何值)。

我的问题是节点服务器正在使用端口 3306 进行连接,所以它给出了下面的错误然后崩溃,但 mysql 已启动并且似乎通过本地主机建立连接,尽管我无法测试它,因为节点服务器已关闭。

错误号:-61, 代码:'ECONNREFUSED', 系统调用:'连接', 地址:'127.0.0.1', 端口:3306, 致命的:真的

一旦我将 MAMP mysql 上的端口从 8889 更改为 3306,节点服务器通过端口 3000 建立连接并给出以下声明:

在端口 3000 上运行的服务器 解决办法是:2

答案 7 :(得分:0)

我使用的是 Windows 10,并且我有适用于 Linux 的 Windows 子系统 (WSFL)。我可以从 WSFL 控制台执行我的项目,但我的 MySQL 安装在 Windows 中并且它们无法连接,但是当我从 Windows 控制台执行我的项目时,它可以正常工作。