You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Sequelize从Node.js连接本地MySQL失败,遇权限拒绝错误

解决Docker运行MySQL容器后本地MySQL权限拒绝问题

问题分析

Docker运行的MySQL容器可能干扰了本地MySQL的权限配置或连接方式,导致localhost(socket连接)验证失败,但127.0.0.1(TCP连接)能通过Workbench正常连接。

解决方案

1. 切换连接方式为TCP/IP

命令行尝试用127.0.0.1代替localhost连接:

mysql -u root -p -h 127.0.0.1

Sequelize配置中修改host为'127.0.0.1',而非'localhost':

const sequelize = new Sequelize('database', 'root', 'pass', {
  host: '127.0.0.1', // 替换原localhost
  dialect: 'mysql'
});

2. 修复root用户localhost的认证插件

通过Workbench登录后,执行以下SQL重置root用户的认证方式(适配socket连接):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的本地MySQL密码';
FLUSH PRIVILEGES;

原因:Docker的MySQL 5.7默认使用mysql_native_password插件,而本地MySQL可能默认启用caching_sha2_password,导致socket连接验证不通过。

3. 检查MySQL Socket文件权限

执行命令查看socket文件权限:

ls -l /var/run/mysqld/mysqld.sock

确保文件所属用户为mysql:mysql,若权限异常,执行:

sudo chown mysql:mysql /var/run/mysqld/mysqld.sock
sudo systemctl restart mysql

4. 重置root用户localhost权限

若上述方法无效,通过Workbench执行以下SQL彻底重置权限:

DROP USER IF EXISTS 'root'@'localhost';
CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的本地MySQL密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:10:36