Node.js mysql2模块无法连接数据库问题求助
解决Node.js mysql2连接数据库时出现ECONNREFUSED ::1:3306的问题
问题分析
报错connect ECONNREFUSED ::1:3306说明mysql2尝试通过IPv6地址::1(localhost的IPv6形式)连接3306端口,但该端口未开放连接。你能通过终端用相同用户连接,说明MySQL服务正常,但监听地址与Node.js解析的localhost地址不匹配。
解决方案
强制使用IPv4地址连接
将连接配置中的host从localhost改为127.0.0.1,直接指定IPv4回环地址,避免系统将localhost解析为IPv6:const mysql = require('mysql2'); const connection = mysql.createConnection({ host: '127.0.0.1', user: '你的数据库用户名', password: '你的数据库密码', database: '目标数据库名' });配置MySQL监听IPv6地址
若需要保留localhost作为host,可修改MySQL配置使其支持IPv6:- 打开MySQL配置文件(Linux/macOS为
/etc/my.cnf或/etc/mysql/my.cnf,Windows为my.ini) - 找到
bind-address配置项,修改为bind-address = ::(允许监听所有IPv4和IPv6地址) - 重启MySQL服务,重新测试连接
- 打开MySQL配置文件(Linux/macOS为
检查系统hosts文件解析
验证系统hosts文件中localhost的解析规则:- Linux/macOS:编辑
/etc/hosts,确保存在127.0.0.1 localhost和::1 localhost两条记录(若只需要IPv4,可临时注释::1 localhost) - Windows:编辑
C:\Windows\System32\drivers\etc\hosts,操作同上
- Linux/macOS:编辑
额外排查点
删除Git相关文件后出现问题,可检查项目中是否有被Git管理的环境配置文件(如.env)被误删,导致数据库连接参数(尤其是host)被重置或丢失,重新补全正确配置即可。
内容的提问来源于stack exchange,提问作者btwon
相关产品推荐
相关产品推荐

