You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在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

  1. 使用root账号登录你的MySQL服务器
  2. 执行以下SQL语句(替换占位符为你自己的数据库信息):
ALTER USER '你的数据库用户名'@'你的数据库主机名' IDENTIFIED WITH mysql_native_password BY '你的数据库密码';
FLUSH PRIVILEGES;

比如你cypress.json里配置的usertest_userhostlocalhost,密码是test_pass,那SQL就是:

ALTER USER 'test_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test_pass';
FLUSH PRIVILEGES;

执行完成后,重新运行Cypress测试即可连接成功。

注意:方案二只是临时兼容方案,长期来看还是推荐使用方案一,因为mysql2是活跃维护的库,能提供更好的性能和更多功能支持。

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

火山引擎 最新活动