使用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
相关产品推荐
相关产品推荐

