You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 mysql
    
    输出需包含0.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:10:20