在使用 Sequelize 连接 MySQL 数据库时,有时会遇到 “SequelizeConnectionError: Client does not support authentication protocol requested by server” 错误,这是由于 MySQL 8.0 版本开始默认使用了新的加密插件,而 Sequelize 的默认加密插件不支持此加密方式导致的。
解决方法
方法一:升级 Sequelize 版本
从 Sequelize 5.0 版本开始,已经支持新的加密插件,因此升级到最新版本即可解决此问题。
npm install sequelize@latest
方法二:修改 MySQL 用户密码加密方式
如果无法升级 Sequelize 版本,可以通过修改 MySQL 用户密码加密方式来解决此问题。
步骤一:登录 MySQL
mysql -u root -p
步骤二:查看当前加密方式
SELECT user, host, plugin FROM mysql.user;
如果出现以下结果,则表示当前使用的是新的加密方式:
+------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | root | localhost | caching_sha2_password | +------------------+-----------+-----------------------+
步骤三:修改用户密码加密方式
ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';
其中,user
和 host
分别为需要修改的用户和主机名,password
为用户密码。
步骤四:刷新权限
FLUSH PRIVILEGES;
方法三:使用兼容的加密插件
如果无法升级 Sequelize 版本或修改 MySQL 用户密码加密方式,可以使用兼容的加密插件来解决此问题。
npm install mysql2@2.2.5
在 Sequelize 配置中添加以下代码:
-- -------------------- ---- ------- ----- --------- - --- ------------------- --------- --------- - -------- -------- -------------- ------------------ --------------- - ---- ------- ----- ------------ - --------------------- -- -- -- -- -------------------- - ----- - -- ----- ----- -------- ------ ---
总结
本文介绍了 Sequelize 在使用 MySQL 时出现的 “SequelizeConnectionError: Client does not support authentication protocol requested by server” 错误处理方法,包括升级 Sequelize 版本、修改 MySQL 用户密码加密方式和使用兼容的加密插件。希望能够帮助大家解决类似问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/660a6b3ed10417a222a05165