1. 复现错误
今天使用Navicat
准备连接mysql
,如下图所示:
点击连接测试
按钮时,却报出如下错误:
即1251- Client does not support authentication protocol requested by server;consider upgrading Mysql client
2. 分析错误
正赶上最近ChatGPT
比较火,借助它来分析我的问题,如下图所示:
ChatGPT
说我版本太低,建议我升级客户端的版本,升级客户端的版本不太可能。因为,完全卸载mysql
还是比较麻烦的。
因而,ChatGPT
没有解决我的问题,我只能通过如下的方式解决该问题了。
- 首先找到
mysql
的bin
目录,mysql bin
目录的默认路径为:C:\Program Files\MySQL\MySQL Server xx \bin
。在地址栏中输入cmd
指令,如下图所示:
- 在
cmd
窗口,输入mysql
数据库的用户名和密码,登录mysql
数据库,如下图所示:
- 执行如下
mysql
查询用户信息的命令
SELECT
HOST,
USER,
PLUGIN,
authentication_string
FROM
mysql.USER;
注意以下三点:
host
为%
表示不限制ip
。
localhost
表示本机使用
plugin
非mysql_native_password
,则需要修改密码
mysql8
之前的版本中,加密规则是mysql_native_password
。
而在mysql8
之后,加密规则是caching_sha2_password
。
解决该问题的方法,有以下两种:
-
方法1:升级
navicat
驱动 -
方法2:把
mysql
用户登录密码加密规则还原成mysql_native_password
。
升级navicat
驱动很麻烦,因而,我采用方法2
解决,具体操作步骤如下。
3. 解决错误
在命令行输入如下命令,修改密码:
-- 更新user为root,host为% 的密码为123456
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 更新user为root,host为localhost 的密码为123456
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
或者
-- 修改加密规则,这行我没有写,不过貌似也可以
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
-- 更新一下用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
-- 刷新权限
FLUSH PRIVILEGES;
再次在Navicat
中连接mysql
,连接成功,如下图所示: