使用Sequelize连接XAMPP本地MySQL数据库遭拒绝的问题
问题描述
使用XAMPP运行本地MySQL数据库,通过Sequelize代码连接时触发报错:
Unable to connect to db ConnectionRefusedError [SequelizeConnectionRefusedError]: connect ECONNREFUSED 127.0.0.1:3306
已尝试修改端口、密码及用户名,问题仍未解决。
用户使用的Sequelize代码:
import { Sequelize } from "sequelize"; const user_auth_db = new Sequelize('db_name', 'root', '', { host: 'localhost', dialect: 'mysql', port: "3306", }); try { await user_auth_db.authenticate(); console.log("Connection has been established succesfully"); } catch (error) { console.log("Unable to connect to db", error); }
错误详情:
parent: Error: connect ECONNREFUSED 127.0.0.1:3306 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) { errno: -111, code: 'ECONNREFUSED', syscall: 'connect', address: '127.0.0.1', port: 3306, fatal: true },
排查与解决步骤
确认XAMPP的MySQL服务状态
打开XAMPP控制面板,检查MySQL模块是否显示为Running。如果没启动,点击「Start」按钮启动服务;若启动失败,点击「Logs」查看具体报错,排查端口占用或配置冲突。核对MySQL实际监听端口
XAMPP的MySQL可能未使用默认3306端口。点击XAMPP控制面板中MySQL模块的「Config」→「my.ini」,查找port配置项确认实际端口号。然后修改Sequelize配置中的port为实际端口(注意用数字类型,不要字符串):port: 3306, // 替换为实际端口,比如3307验证MySQL账号密码正确性
点击XAMPP中MySQL模块的「Admin」打开phpMyAdmin,登录时使用的账号密码就是Sequelize需要的参数。如果root用户无密码,保持Sequelize配置中的密码为'';若设置过密码,填入正确值。替换host为127.0.0.1
部分环境下localhost会解析到IPv6地址::1导致连接失败,把Sequelize配置中的host改为'127.0.0.1'再尝试。确认目标数据库已创建
在phpMyAdmin中检查是否存在名为db_name的数据库,不存在的话先创建再重新运行连接代码。检查本地防火墙设置
本地防火墙可能拦截了Node.js访问3306端口,暂时关闭防火墙测试,若能连接则需给Node.js添加端口访问权限。
内容的提问来源于stack exchange,提问作者Arin CelMare

