问题描述
在使用 sequelize 连接 mysql 数据库时,会出现这个错误:
SequelizeConnectionError: Client does not support authentication protocol requested by server; consider upgrading MySQL client
大概的意思就是: MySQL 拒绝我们的连接请求,让我们尝试升级 MySQL 版本。
升级版本这种操作,改动比较大,可能会影响线上数据服务。因此,采用了一个影响范围较小的方式。
解决方案
- 步骤一:登录本机数据库
# 登录本机数据库
$ mysql -uroot -p<local_password>
# 选择数据库
mysql > use <db_name>;
-
步骤二:修改本地用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<local_password>';
Query OK, 0 rows affected (0.06 sec) -
步骤三:更新状态
flush privileges;
Query OK, 0 rows affected (0.06 sec)
完整代码
const Sequelize = require('sequelize');
const sequelize = new Sequelize('ci', 'root', '123', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
},
operatorsAliases: false
});
问题原因
修改密码校验方式的原因是 8.0 版的 mysql 使用的 caching_sha2_password 没有被当前使用的 mysql.js 支持