Node.js+MySQL报错1251:客户端不支持服务器要求的认证协议
解决Sequelize连接MySQL时的1251认证协议错误
嘿,这个问题我碰到过好多次啦!本质原因是你的MySQL版本大概率是8.0及以上,默认启用了caching_sha2_password这种更安全的认证插件,但你当前使用的Sequelize或MySQL客户端版本不支持这个协议,所以才抛出了这个错误。下面给你两个可行的解决办法,按需选择:
方法一:修改MySQL用户的认证方式(开发环境快速搞定)
如果你只是在本地开发测试,想快速解决问题,可以直接把用户的认证方式改回旧的mysql_native_password:
打开终端,登录MySQL命令行:
mysql -u root -p输入你的root密码(就是你代码里写的
passwd)进入控制台。执行这条SQL修改用户认证规则:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'passwd';注意把这里的
passwd替换成你实际的数据库密码,要和代码里的保持一致哦。最后刷新权限让修改生效:
FLUSH PRIVILEGES;
做完这些,重新运行你的Node.js脚本,应该就能正常连接数据库了。
方法二:升级依赖适配新认证协议(生产环境推荐)
如果是生产环境,或者不想改动MySQL的安全配置,更规范的做法是升级你的依赖,让客户端支持新的认证协议:
先卸载旧的MySQL客户端依赖:
npm uninstall mysql mysql2安装最新版本的
mysql2(它对新认证协议的支持更好):npm install mysql2@latest(可选但稳妥)修改你的代码,手动指定使用
mysql2作为dialect模块:const Sequelize = require('sequelize'); const mysql2 = require('mysql2'); const sequelize = new Sequelize('database', 'root', 'passwd', { host: 'localhost', dialect: 'mysql', dialectModule: mysql2, operatorsAliases: false });
另外,如果你的Sequelize版本比较旧,也建议一并升级到最新稳定版,避免其他潜在的兼容性问题:
npm uninstall sequelize npm install sequelize@latest
升级完成后,客户端就能完美支持caching_sha2_password认证,不需要改动MySQL的任何配置,更符合生产环境的安全要求。
内容的提问来源于stack exchange,提问作者ifhy
相关产品推荐
相关产品推荐

