【问题标题】:Node.js MySQL - Error: connect ECONNREFUSEDNode.js MySQL - 错误:连接 ECONNREFUSED
【发布时间】:2015-07-27 18:35:35
【问题描述】:

我使用 Node.js 服务器端。我在本地主机上尝试了我的代码,一切正常。我购买了一台服务器并在其上安装了 Apache 和 node.js 并在那里测试我的 Web 应用程序。我正确地将 MySQL 连接配置从 localhost 更改为服务器配置。

我使用此配置测试我的 Web 应用程序:

var mysql      = require('mysql');
var mysqlConnection;
function new_mysqlConnection() {
    mysqlConnection = mysql.createConnection({
      host     : 'myurl.at',
      user     : 'myusername',
      database : 'mydatabase',
      password : 'mypassword'
    });
}

我使用以下命令启动 node.js 服务器:

$ node server.js

当我加载页面时,它显示正确,但是当 Node.js 尝试连接到数据库时,我总是收到以下错误:

Error: connect ECONNREFUSED
    at errnoException (net.js:905:11)
    at Object.afterConnect [as oncomplete] (net.js:896:19)
    --------------------
    at Protocol._enqueue (/var/www/node_modules/mysql/lib/protocol/Protocol.js:135:48)
    at Protocol.handshake (/var/www/node_modules/mysql/lib/protocol/Protocol.js:52:41)
    at Connection.connect (/var/www/node_modules/mysql/lib/Connection.js:119:18)
    at reconnectDb (/var/www/server.js:319:18)
    at app.get.email (/var/www/server.js:109:2)
    at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5)
    at trim_prefix (/var/www/node_modules/express/lib/router/index.js:302:13)
    at /var/www/node_modules/express/lib/router/index.js:270:7
    at Function.proto.process_params (/var/www/node_modules/express/lib/router/index.js:321:12)
    at next (/var/www/node_modules/express/lib/router/index.js:261:10)

【问题讨论】:

  • 要么你的主机错误,要么你需要指定一个端口号。你的 mysqld 运行的端口是什么?解决这个问题后,另一种可能是你主机上的端口被阻塞了。您通过什么类型的网络连接?通常我们通过 localhost 或内部网络连接,而不是 Internet。
  • @beiller 首先感谢您的快速回答。我已经尝试过在配置中设置端口,但它也不起作用。 Mysql 在此端口上运行:tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 4322/mysqld 我的 server.js 在端口 2000 上运行,两者应该在同一个端口上运行吗? “您通过什么类型的网络连接”是什么意思?坦克你!
  • 不,它们不在同一个端口上运行。您的错误消息基本上意味着“您的连接被操作系统拒绝” IE 您从未接近触摸 mysql 服务器。通过问什么网络,我问,mysql和你的node.js应用程序是在同一个物理服务器上运行的吗?
  • 是的 mysql 和 node.js 在同一台物理服务器上运行,但我已经解决了问题。我必须像这样在mysql连接配置中添加socketPath:socketPath: '/var/run/mysqld/mysqld.sock'但是谢谢你的时间! :)
  • @Nico 您会接受以下答案还是自己回答?似乎显示了您使用的解决方案。这个答案也对我有用。

标签: mysql node.js apache


【解决方案1】:

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

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

在 MAMP 中,您转到 http://localhost:8888/MAMP,您会发现:

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

最后你有:

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

【讨论】:

  • 这是给我的! 2 天的挫折.. 非常感谢!
  • 像魅力一样工作。该文件之前是空的,所以我添加了这些行并且工作正常!非常感谢。
  • 它为我节省了一天的挫败感,有趣的是在 MacOS 上没有必要,但在 Ubuntu 上,express.js 的相同配置在没有 socketPath 的情况下会断开连接
【解决方案2】:

检查服务器中的 MySQL 端口。

在 MAMP 中,默认使用 8889。

将其添加到您的连接配置中。

您的 MySQL 配置应如下所示。

this.pool = mysql.createPool({
  connectionLimit: 10,
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'todo',
  port: '8889'
});

【讨论】:

    【解决方案3】:

    我在使用 nginx 的谷歌云中也有同样的问题

    变了

     host: 'localhost'
    

    host : 'cloud_instance_private_ip'

    可以帮助有同样问题的人

    【讨论】:

      【解决方案4】:

      这可能是由于没有端口和数据库。 首先我写道: 主持人, 用户, 密码,没有数据库和端口。

      这里你需要指定你的数据库名称是什么,你的端口号是什么。 所以总数必须是: 1.主机 2. 用户 3.密码 4. 数据库 5.端口

      它对我有用,如果它也对你有用,试试吧。

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,但我通过更改解决了这个问题

        host:  'localhost'
        

        host:   '127.0.0.1'
        

        【讨论】:

        • 这行得通。我只是想知道这可能是什么解释?我知道 localhost 的 IP 是 127.0.01
        【解决方案6】:

        检查你的 xampp 服务器 mysql 是否正在运行

        【讨论】:

          【解决方案7】:

          我也有同样的问题,但我通过添加找到了解决方案: port:"80" I connect with node.js to the server php mysql using this code: var mysql=require('mysql');`

          var connection=mysql.createConnection({
             port:"80",
              host:"localhost",
              user:"root",
              password:""
          });
          

          【讨论】:

            【解决方案8】:

            经过两天的努力,我通过以下代码修复了它。 (只是给出我的解决方案,您可能还有其他解决方案。)

            也遵循这些步骤。

            1. 删除所有node_modules
            2. 运行“npm audit --force”
            3. 通过“npm install”安装 npm 包

            const sequelize = new Sequelize("test", "root", "root", { host: "127.0.0.1", dialect: "mysql", port: "8889", connectionLimit: 10, socketPath: "/Applications/MAMP/tmp/mysql/mysql.sock" });

            注意:我正在使用带有 graphql (NODEJS) 的 sequelize。

            【讨论】:

              【解决方案9】:

              从搜索栏中打开服务。在那里搜索 MySQL80。右键单击它并单击开始。现在运行代码。它应该可以工作。大多数情况下 SQL 服务在计算机启动时处于非活动状态

              【讨论】:

                【解决方案10】:

                我建议在您的下表中添加端口;

                const pool=mysql.createPool({
                    host: '127.0.0.1',
                    user: 'root',
                    database: 'node-complete',
                    port: "3307",
                    password: 'Aditya2000#'
                });
                

                端口号将从您的 MySql Workbench 的主页表中获取,该表应显示:

                Local Instance MySql root localhost: 3307 -> 这个本地主机号 必须写在那里。

                【讨论】:

                  【解决方案11】:

                  在大多数情况下,您的主机应该与 MySQL 配置文件中的绑定地址匹配。 如果您的绑定地址是 0.0.0.0 或 127.0.0.1,那么将主机设置为“localhost”应该可以。但如果您的绑定地址是您的实际 IP 地址,那么您应该添加您的 IP 地址。

                  var sql_con = mysql.createConnection({ 
                  host: "ip address",// should be the same as bind-address
                  user: "jeffery",
                  password: "damnthing",
                  database: "KOKATOOO"
                  });
                  

                  【讨论】:

                  • 谢谢你。我到处搜索如何解决这个错误,而你的解决方案是唯一对我有帮助的解决方案
                  • @BarretV 很高兴我能帮上忙!
                  【解决方案12】:

                  我有同样的问题原来 mysql 没有运行。 确保它通过以下方式运行:

                  $ systemctl status mysqld

                  如果你看到这个:

                  ● mysqld.service - MySQL Server
                     Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
                     Active: failed (Result: start-limit) since Tue 2020-08-18 12:12:29 CDT; 32min ago
                       Docs: man:mysqld(8)
                             http://dev.mysql.com/doc/refman/en/using-systemd.html
                    Process: 18668 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=2)
                    Process: 18650 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
                   Main PID: 18668 (code=exited, status=2)
                     Status: "SERVER_BOOTING"
                  
                  

                  那么服务没有运行,运行回车:

                  $ systemctl start mysqld

                  【讨论】:

                    【解决方案13】:

                    遇到过类似的问题,使用相同的配置,可以从本地 -> mysql 服务器连接,但在作为 cronjob 部署到 k8s 集群时无法连接。不知道为什么,但解决方法是在运行应用程序之前添加sleep 10 &&args: ["-c", 'sleep 10 && node index.js']

                    【讨论】:

                      【解决方案14】:

                      我也面临同样的问题,但我已经做到了:

                      1. 使用 XAMPP 打开您的 MySQL
                      2. 创建一个将在代码中提及的数据库。 (我有名为“node js”的数据库。

                      通过这样做,我的代码可以完美运行。

                      You can see here

                      【讨论】:

                        【解决方案15】:

                        我有同样的问题,我通过添加我的端口解决了它

                        Port: YOUR_PORT
                        

                        遇到同样的问题,我通过添加端口解决了它

                        【讨论】:

                          【解决方案16】:

                          我在 PhpMyAdmin 中创建了一个新用户,用户名为“user”,密码为“”。我将主机设置为“%”,它允许来自任何主机的连接。

                          使用你在XAMPP控制面板中找到的IP地址作为节点js代码中的主机

                          我已经使用XAMPP控制面板中的IP地址作为数据库连接中的主机

                          这样就解决了问题并连接到数据库

                          【讨论】:

                            【解决方案17】:

                            如果使用 express 和 MySQL。端口应与您的 MySQL 端口相同。
                            默认的 MySQL 端口是3306

                            let defaultPORT = 3306;
                            var express = require('express');
                            var app = express();
                            var mysql  = require('mysql');
                            var connection = mysql.createConnection({
                                host     : 'localhost',
                                user     : 'yourMYSQLUser',
                                password : 'yourMYSQLPassword'
                            });
                            connection.connect();
                             
                            connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
                                if (error) throw error;
                                console.log('The solution is: ', results[0].solution);
                            });
                            
                            var server = app.listen( defaultPORT, function() {
                                console.log( defaultPORT)
                            });
                            

                            【讨论】:

                              猜你喜欢
                              • 2020-04-30
                              • 1970-01-01
                              • 1970-01-01
                              • 2014-02-08
                              • 2014-05-20
                              • 2021-02-27
                              • 1970-01-01
                              • 1970-01-01
                              • 2016-02-16
                              相关资源
                              最近更新 更多