Node.js MySQL - 错误:连接 ECONNREFUSED

问题描述 投票:0回答:20

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

我用这个配置测试我的网络应用程序:

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)
mysql node.js apache
20个回答
53
投票

需要在config对象中添加

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'
});

40
投票

我有同样的问题,但我通过改变解决了这个

host:  'localhost'

host:   '127.0.0.1'

22
投票

检查服务器中的 MySQL 端口。

在 MAMP 中,默认使用 8889.

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

您的 MySQL 配置应如下所示。

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

5
投票

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


3
投票

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

也请遵循这些步骤。

  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"
});

注意:我正在使用 sequelize 和 graphql (NODEJS)。


2
投票

如果使用 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)
});

1
投票

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

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 -> 这个本地主机号 必须写在那里。


1
投票

在大多数情况下,您的主机应该与您在 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"
});

1
投票

我遇到了同样的问题,结果是 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 


0
投票

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

变了

 host: 'localhost'

host     : 'cloud_instance_private_ip'

可以帮助有同样问题的人


0
投票

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

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

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


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:""
});

0
投票

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


0
投票

遇到过类似的问题,使用相同的配置,可以从本地 -> mysql 服务器连接,但当作为 cronjob 部署到 k8s 集群时却不能。不知道为什么,但解决方法是在运行应用程序之前添加

sleep 10 &&
args: ["-c", 'sleep 10 && node index.js']


0
投票

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

Port: YOUR_PORT

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


0
投票

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

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

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

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


0
投票

也许它会对某人有所帮助,就我而言,当我遇到这个问题时我正在使用 strapi 应用程序,我意识到我没有创建数据库,所以我正在使用 Mamp 我去 php 我的管理员创建了 db 并在配置中更新了 database.js文件夹,现在它工作正常


0
投票

在我的例子中,它在本地工作,但现在部署时。 问题是我没有更新环境变量


0
投票

就我而言,我下载了 XAMPP 并检查了我的用户名和密码,然后终于成功了。

XAMPP > mySQL connected > phpmyadmin > user accounts
:查看您的帐户详细信息!

希望这有帮助。


-1
投票

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

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

通过执行这些操作,我的代码可以完美运行。

You can see here

© www.soinside.com 2019 - 2024. All rights reserved.