MySQL错误码ECONNREFUSED含义解析及Node.js远程连接失败求助
MySQL错误码ECONNREFUSED含义及Node.js连接远程MySQL的解决办法
一、ECONNREFUSED错误码的含义
ECONNREFUSED 本质是连接被拒绝,意味着你的Node.js程序尝试发起TCP连接到MySQL服务器的指定端口时,服务器端没有响应——可能是端口未开放、MySQL未监听对应地址,或是防火墙拦截了请求。
二、针对你的场景的排查与解决步骤
既然你能通过MySQL Workbench正常连接,说明用户权限(%设置)没问题,重点排查以下几个方向:
1. 验证Node.js连接配置的host值
确认process.env.DB_HOST是MySQL服务器的公网IP/域名,无拼写错误或多余空格。可以临时在代码中打印该值验证:
console.log('DB_HOST:', process.env.DB_HOST);
2. 检查MySQL是否监听公网地址
Ubuntu默认MySQL可能仅监听127.0.0.1(本地回环),即便用户主机设为%,也无法远程连接:
- 编辑MySQL配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - 找到
bind-address行,修改为0.0.0.0(监听所有网卡),或直接注释该行。 - 重启MySQL服务:
sudo systemctl restart mysql - 验证监听状态:
输出需包含sudo netstat -tulpn | grep mysql0.0.0.0:3306或:::3306,说明MySQL在监听公网端口。
3. 检查Ubuntu本地防火墙规则
Ubuntu的ufw防火墙可能拦截了3306端口的入站请求:
- 查看当前规则:
sudo ufw status - 若未允许3306端口,添加规则:
sudo ufw allow 3306/tcp - 重新加载防火墙:
sudo ufw reload
4. 排查Node.js MySQL客户端兼容性
旧版mysql客户端可能与新版MySQL服务器存在兼容问题,建议切换到维护更活跃的mysql2:
- 安装依赖:
npm install mysql2 - 修改连接代码示例:
const mysql = require('mysql2'); const connection = mysql.createConnection({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASS, database: process.env.DB_NAME, }); connection.connect(err => { if (err) { console.error('连接失败:', err); return; } console.log('连接成功!'); });
5. 检查云服务器安全组规则(若为云主机)
如果你使用阿里云、腾讯云等云服务器,除了Ubuntu本地防火墙,云平台的安全组也需开放3306端口的入站规则,允许你的Node.js程序所在IP(或所有IP用于测试)访问。
内容的提问来源于stack exchange,提问作者StepanKomis
相关产品推荐
相关产品推荐

