在Cypress中连接MySQL遇认证协议不兼容错误,求解决方案
解决Cypress连接MySQL时的ER_NOT_SUPPORTED_AUTH_MODE错误
这个错误的核心原因是你的MySQL服务器(通常是8.0及以上版本)默认启用了caching_sha2_password认证协议,但你当前使用的mysql npm包属于停止维护的旧版库,并不支持这种新的认证方式。下面提供两种可行的解决思路:
方案一:升级MySQL客户端库(推荐)
旧的mysql包已经停止维护,官方推荐使用mysql2包,它完全支持caching_sha2_password认证,并且API和旧库基本兼容,改动很小:
- 第一步:卸载旧的
mysql包
npm uninstall mysql
- 第二步:安装
mysql2开发依赖
npm install mysql2 --save-dev
- 第三步:修改
plugins/index.js中的引入语句,把mysql换成mysql2:
// 原来的代码 // const mysql = require('mysql') // 修改为 const mysql = require('mysql2')
剩下的代码不需要改动,重新运行Cypress测试即可。
方案二:修改MySQL用户的认证模式
如果你暂时不想更换客户端库,可以将数据库用户的认证方式切换回旧的mysql_native_password:
- 使用root账号登录你的MySQL服务器
- 执行以下SQL语句(替换占位符为你自己的数据库信息):
ALTER USER '你的数据库用户名'@'你的数据库主机名' IDENTIFIED WITH mysql_native_password BY '你的数据库密码'; FLUSH PRIVILEGES;
比如你cypress.json里配置的user是test_user,host是localhost,密码是test_pass,那SQL就是:
ALTER USER 'test_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test_pass'; FLUSH PRIVILEGES;
执行完成后,重新运行Cypress测试即可连接成功。
注意:方案二只是临时兼容方案,长期来看还是推荐使用方案一,因为
mysql2是活跃维护的库,能提供更好的性能和更多功能支持。
内容的提问来源于stack exchange,提问作者Anju Abraham




