【问题标题】:node.js mysql error: ECONNREFUSEDnode.js mysql错误:ECONNREFUSED
【发布时间】:2014-02-08 00:24:53
【问题描述】:

为什么连接不上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

【问题讨论】:

  • 你能发布ps ax | grep mysqld的输出吗?我想看看mysql运行的标签是什么
  • --port=3306port : 3308,。将脚本中的端口更改为 3306,它应该可以工作。

标签: mysql node.js econnrefused


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      我使用的是 Arch Linux,因此,在我的项目中已经安装了 NPM 包的情况下,我做了 pacman -Syu mariadb(MariaDB 是 Arch Linux 中 MySQL 的 default implementation),然后按照 @ 987654322@.

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

      • 通过运行mysql -u root -p 输入mysql 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"
      });
      

      【讨论】:

        【解决方案4】:

        概述

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

        解决方案

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

        “允许网络访问MySQL”。

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

        提示

        请记住,您可以通过打开 MAMP 并单击左侧导航面板上的端口链接来检查您的 MySQL 正在哪个 port 上运行。

        视觉辅助

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 不确定,但这可能是因为您的 Apache Web 服务器没有运行。
          【解决方案6】:

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

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

          到连接选项。

          【讨论】:

          • 在 Ubuntu 上测试了这个解决方案,它对我和其他解决方案一样有效。
          • 对于osx MAMP,端口是/Applications/MAMP/tmp/mysql/mysql.sock
          • 只是为未来的读者插话:这解决了通过节点连接到 Angstrom Distribution 上的 mysql 的问题(至少对我来说是在 BeagleBoneBlack 上),路径实际上是 /tmp/mysql.sock跨度>
          • 对于 centos 端口:'/var/lib/mysql/mysql.sock' 工作正常,谢谢
          • 谢谢!也在 Ubuntu 20.04 上工作过。
          【解决方案7】:

          如果这以前有效,我的第一个猜测是您已经获得了在后台运行的 node.js 脚本的副本,该脚本正在保持连接。

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

          您可以尝试 telnet 到 3308 端口吗?查看服务器是否在该端口上运行?

          telnet localhost 3308
          

          你也可以试试:

          mysql -hlocalhost -uroot -pxxx
          

          【讨论】:

          • 从命令行运行它可以正常工作mysql -hlocalhost -uroot -pxxx.. 我怎样才能杀死所有 node.js 脚本?!
          • 抱歉 mysql -hlocalhost -P 3308 -uroot -pxxx 忘记了端口.. 但它可以工作
          • 现在尝试创建一个'root'@'%' 并授予所有权限..同样的错误..嗯..
          • hmm.. 我不知道为什么,但是当我将端口更改为默认端口 3306 时它可以工作!?事实上,在 PHP 应用程序中它连接到端口 3308,并且端口 3308 也在 my.cnf 中分配...
          • 我想猜测 PHP 实际上是在使用套接字,而 PHP 配置中的 3308 是不正确的。
          猜你喜欢
          • 2015-07-27
          • 2020-04-30
          • 1970-01-01
          • 1970-01-01
          • 2018-07-10
          • 1970-01-01
          • 2021-02-27
          • 2014-05-20
          • 1970-01-01
          相关资源
          最近更新 更多