不关闭防火墙如何解决MySQL连接报错ECONNREFUSED问题?
MySQL连接ECONNREFUSED报错排查方案
ECONNREFUSED 报错核心原因是Node.js进程无法和本地3306端口的服务建立TCP连接,排除防火墙规则问题后,可按以下步骤排查:
- 确认MySQL服务处于运行状态
绝大多数此类报错都是MySQL服务未启动导致:- Windows:运行输入
services.msc打开服务列表,找到MySQL对应服务,右键选择启动即可 - macOS:brew安装的MySQL执行
sudo brew services start mysql,dmg安装的可在系统设置面板找到MySQL入口点击启动 - Linux:执行
sudo systemctl start mysql(Debian/Ubuntu)或sudo systemctl start mysqld(CentOS/RHEL)
服务启动后可先在终端执行mysql -u todos_app -p,输入密码todos_app测试能否正常登录,登录成功后再运行Node项目代码。
- Windows:运行输入
- 确认MySQL监听端口配置正确
部分自定义安装的MySQL会修改默认监听端口,不会使用3306:
打开MySQL配置文件(Windows为my.ini,Linux/macOS为my.cnf),查找port配置项,确认实际监听端口。如果端口不是3306,需要在createPool的配置中新增对应port字段,示例:const pool = mysql.createPool({ host: 'localhost', port: 3307, // 替换为你实际的MySQL端口 user: 'todos_app', password: 'todos_app', database: 'todos_app' }); - 确认MySQL用户权限配置正确
如果todos_app用户仅允许127.0.0.1地址登录,不允许localhost登录也会触发连接失败,可先尝试将代码中host字段值改为127.0.0.1测试。也可以直接登录MySQL给用户赋权:GRANT ALL PRIVILEGES ON todos_app.* TO 'todos_app'@'localhost' IDENTIFIED BY 'todos_app'; FLUSH PRIVILEGES; - 更换兼容的MySQL连接包
你当前使用的mysqlnpm包已停止维护,对MySQL 8.0及以上版本的默认密码认证插件支持不佳,可更换为官方推荐的mysql2包,API完全兼容无需修改业务代码:
执行安装命令:npm install mysql2
将导入语句替换为:import * as mysql from 'mysql2'
内容的提问来源于stack exchange,提问作者Brian Tang
相关产品推荐
相关产品推荐

