Node.js MySQL - 错误:连接ECONNREFUSED

时间:2015-05-15 18:16:05

标签: mysql node.js apache

我使用Node.js服务器端。我在localhost上尝试了我的代码,一切正常。我买了一台服务器并在其上安装了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)

16 个答案:

答案 0 :(得分:29)

您需要将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'
});

答案 1 :(得分:13)

检查服务器中的MySQL端口。

在MAMP中,默认使用8889。

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

你的MySQL配置应该是这样的。

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

答案 2 :(得分:1)

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

host:  'localhost'

host:   '127.0.0.1'

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

也请遵循以下步骤。

  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)的续集。

答案 5 :(得分:0)

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

已更改

 host: 'localhost'

host : 'cloud_instance_private_ip'

可以帮助一个有同样问题的人

答案 6 :(得分:0)

这可能是因为没有端口和数据库。 首先我写道: 主办, 用户, 密码,没有数据库和端口。

在这里,您需要指定您的数据库名称是什么,您的端口号是多少。 所以总数必须是: 主持人 2.用户 密码 4.数据库 5.端口

它对我有用,如果它也适合你,请尝试它。

答案 7 :(得分:0)

我也有同样的问题,但是我通过添加以下内容找到了解决方案: 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 :(得分:0)

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

答案 9 :(得分:0)

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

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

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

本地实例MySql根localhost:3307->此localhost编号 必须写在那里。

答案 10 :(得分:0)

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

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

答案 11 :(得分:0)

我有同样的问题,事实证明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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

Port: YOUR_PORT

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

答案 14 :(得分:0)

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

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

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

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

答案 15 :(得分:-2)

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

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

通过这样做,我的代码运行良好。

You can see here