You need to enable JavaScript to run this app. Node.js跨服务器连接MySQL出现ECONNREFUSED连接拒绝报错排查
优惠活动
大模型
产品
解决方案
定价
更多

Node.js跨服务器连接MySQL出现ECONNREFUSED连接拒绝报错排查

Node.js跨服务器连接MySQL报ECONNREFUSED的排查方案

分步排查操作

  • 校验MySQL的网络监听绑定范围
    仅判断“3306端口正常监听”很容易产生误判:多数Linux发行版的MySQL默认配置会设置bind-address = 127.0.0.1,此时3306端口仅响应本机发起的TCP连接。因为phpMyAdmin和MySQL部署在同一台服务器上,通过本地回环地址访问完全正常,但跨服务器的连接请求会被直接丢弃,触发ECONNREFUSED错误。
    可在MySQL服务器上执行ss -tulnp | grep 3306确认实际监听地址:如果输出结果显示监听地址为127.0.0.1:3306,需要修改MySQL配置文件(通常为mysqld.cnf)中的bind-address项为0.0.0.0(或指定MySQL服务器对应局域网网卡的IP),修改完成后重启MySQL服务即可。
  • 排查系统防火墙的拦截规则
    服务器启用的系统级防火墙(如ufw、firewalld、iptables)如果未配置3306端口的入站放行规则,跨主机发起的TCP连接会被直接重置,同样会触发ECONNREFUSED错误。
    可在Node.js所在的服务器上执行连通性测试命令nc -zv 192.168.1.250 3306,如果命令返回连接被拒绝,需要检查MySQL服务器的防火墙配置,放行来自Node.js服务器IP的3306端口访问权限。
    注意:不要仅依靠同机部署的phpMyAdmin运行正常,就默认MySQL的TCP连接是对外开放的,因为phpMyAdmin通过本地Socket连接完全不需要依赖TCP端口配置和跨主机网络规则
  • 校验MySQL账号的远程访问授权
    如果mcd账号仅配置了localhost的访问权限,跨服务器发起的连接会被MySQL服务主动拒绝,部分场景下也会触发连接类报错。
    可进入MySQL控制台执行SELECT user, host FROM mysql.user WHERE user = 'mcd';查询账号的允许访问来源,如果host字段仅为localhost,需要为账号配置对应远程访问权限,例如允许Node.js服务器所在IP访问:
    GRANT ALL PRIVILEGES ON mcd.* TO 'mcd'@'Node.js服务器的局域网IP' IDENTIFIED BY '你的账号密码';
    FLUSH PRIVILEGES;
    
  • 确认MySQL实际监听的TCP端口
    即使MySQL运行在默认配置下,也可能因为配置偏差导致实际TCP监听端口非3306。由于phpMyAdmin通常通过Unix Socket连接本地MySQL,不会触发TCP端口连接的相关报错,容易造成“3306正常运行”的误判。通过之前的ss命令可直接确认MySQL实际监听的TCP端口,避免连接配置和实际服务不匹配。

内容的提问来源于stack exchange,提问作者HarryBilney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 19:27:05