Node连接本地MySQL 8.0报错ECONNREFUSED 仅Node环境出现该问题如何排查
MySQL 8.0 Node连接ECONNREFUSED(::1:3306) 排查方向
- MySQL监听地址验证
该报错核心是Node尝试连接IPv6回环地址::1的3306端口被拒绝,80%以上的同类问题是因为MySQL默认仅监听IPv4回环地址127.0.0.1,未开启IPv6监听。
执行命令netstat -an | grep 3306查看监听地址,若无:::3306或::1.3306类的IPv6监听记录即可确认。
临时解决方案:将数据库连接配置中的host从localhost改为127.0.0.1,强制使用IPv4连接。
永久解决方案:修改MySQL配置文件my.cnf的bind-address参数为::,127.0.0.1,同时支持IPv4、IPv6回环地址监听,修改后重启MySQL服务生效。 - Node域名解析优先级验证
Node v17及以上版本默认遵循RFC 6724规范,优先将localhost解析为IPv6地址,而Python等其他语言默认优先解析为IPv4地址,这就是相同配置下Python可连接、Node连接失败的核心原因。
可执行以下测试脚本确认解析结果:
若输出为const dns = require('dns'); dns.lookup('localhost', (err, address, family) => { console.log('localhost解析结果:%j,地址族:IPv%s', address, family); });::1即可确认,也可在数据库连接配置中新增family: 4参数,强制Node使用IPv4解析域名,mysql、mysql2包均支持该配置。 - MySQL用户主机权限排查
该场景出现概率较低,因为权限不足通常返回Access Denied报错而非连接拒绝。可执行SQLSELECT user,host FROM mysql.user WHERE user='你的数据库用户名';确认是否存在用户名@::1的授权记录,若缺失可补充对应授权。 - 系统hosts配置排查
查看/etc/hosts文件中localhost的映射规则,确认是否同时存在127.0.0.1 localhost和::1 localhost两条配置,若有异常可修正后重试。 - 本地网络规则排查
确认Mac系统防火墙、第三方安全软件未拦截IPv6回环地址的3306端口连接,该场景概率极低,可作为最后排查项。
内容的提问来源于stack exchange,提问作者L. Nelson
相关产品推荐
相关产品推荐

