提问人:Nico 提问时间:5/16/2015 最后编辑:VeveNico 更新时间:7/16/2023 访问量:215450
Node.js MySQL - 错误:连接 ECONNREFUSED
Node.js MySQL - Error: connect ECONNREFUSED
问:
我使用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)
答:
您需要将 的值添加到配置对象中: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'
});
检查服务器中的MySQL端口。
在 MAMP 中,默认情况下它使用 8889。
将其添加到连接配置中。
您的 MySQL 配置应如下所示。
this.pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
user: 'root',
password: 'root',
database: 'todo',
port: '8889'
});
我在谷歌云中使用nginx也有同样的问题
改变
host: 'localhost'
自
host : 'cloud_instance_private_ip'
可能会帮助一些有同样问题的人
这可能是由于没有端口和数据库。 首先我写道: 主机 用户 密码,没有数据库和端口。
在这里,您需要指定您的数据库名称是什么,您的端口号是什么。 因此,总数必须为: 1. 主机 2. 用户 3. 密码 4. 数据库 5. 端口
它对我有用,如果它也对你有用,请尝试一下。
我遇到了同样的问题,但我通过改变解决了这个问题
host: 'localhost'
自
host: '127.0.0.1'
评论
检查您的 xampp 服务器 mysql 是否正在运行
我也有同样的问题,但我通过添加找到了解决方案: var mysql=require('mysql');'port:"80"
I connect with node.js to the server php mysql using this code:
var connection=mysql.createConnection({
port:"80",
host:"localhost",
user:"root",
password:""
});
经过两天的挣扎,我用下面的代码修复了它。(只是给出我的解决方案,您可能还有另一个解决方案。
请按照以下步骤操作。
- 删除所有node_modules
- 运行“npm audit --force”
- 通过“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) 一起使用。
从搜索栏中打开服务。在那里搜索MySQL80.右键单击它,然后单击开始。现在运行代码。它应该起作用。大多数情况下,当计算机启动时,SQL 服务处于非活动状态
我建议在下表中添加端口;
const pool=mysql.createPool({
host: '127.0.0.1',
user: 'root',
database: 'node-complete',
port: "3307",
password: 'Aditya2000#'
});
端口号将从MySql Workbench的主页表中获取,该表应显示:
本地实例 MySql 根 localhost:3307 ->此 localhost 编号 必须写在那里。
在大多数情况下,您的主机应与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"
});
评论
我遇到了同样的问题,原来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
遇到过类似的问题,使用相同的配置,可以从本地 -> mysql 服务器连接,但在作为 cronjob 部署到 k8s 集群时则不能。不知道为什么,但解决方法是在运行应用程序之前添加:sleep 10 &&
args: ["-c", 'sleep 10 && node index.js']
我面临同样的问题,但我已经这样做了:
- 使用 XAMPP 打开 MySQL
- 创建一个将在代码中提及的数据库。(我有名为“node js”的数据库。
通过这样做,我的代码可以完美地工作。
我遇到了同样的问题,我通过添加我的端口解决了它
Port: YOUR_PORT
有同样的问题,我通过添加端口解决了它
我在PhpMyAdmin中创建了一个新用户,用户名为“user”,密码为“”。我将主机设置为“%”,允许从任何主机进行连接。
使用您在 XAMPP 控制面板中找到的 IP 地址作为节点 js 代码中的主机
我已将 XAMPP 控制面板中的 IP 地址用作数据库连接中的主机
这解决了问题并连接到数据库
如果使用 express 和 MySQL。port 应与 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)
});
也许它会帮助某人,就我而言,当我遇到这个问题时,我正在使用 strapi 应用程序,我意识到我没有创建数据库,所以我正在使用 Mamp 我去 php 我的管理员创建的数据库并在配置文件夹中更新了数据库 .js,现在它工作正常
就我而言,它在本地工作,但现在部署时。 问题是我没有更新环境变量
就我而言,我下载了 XAMPP 并检查了我的用户名和密码,然后它终于起作用了。
XAMPP > mySQL connected > phpmyadmin > user accounts
:查看您的帐户详细信息!
希望这会有所帮助。
回复:关于 localhost 与 127.0.0.1 的问题(我没有足够的声誉来添加评论:-( ) - https://stackoverflow.com/a/53533120/1804408
我有同样的问题,我通过使用解决了它。host: "localhost"
"127.0.0.1"
我收到错误 - 我最终意识到它正在报告 IPv6 本地地址。即使我用@'%'和@'localhost'定义了MySQL用户,看起来MySQL不喜欢IPv6本地地址 - 可能与我的MySQL设置有关。Error: connect ECONNREFUSED ::1:3306
评论
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 4322/mysqld
socketPath: '/var/run/mysqld/mysqld.sock'