目录
第二种:把用户密码登录的加密规则还原成mysql_native_password这种加密方式
一、前言
今天学习Docker,并使用Docker部署MYSQL,部署很顺利,但当我用本机的Navicat去连接Linux下的MYSQL,发现报错Client does not support authentication protocol requested by server client,查了相关资料发现,原因可能是mysql8之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,而你的Navicat版本太低,导致无法连接。
二、解决办法
第一种:升级你的Navicat版本
这种方法有点麻烦,有的还收费,所以我选择下一种方法。
第二种:把用户密码登录的加密规则还原成mysql_native_password这种加密方式
步骤一
docker exec -it mysql bash
此命令进入到MYSQL中。
步骤二
通过mysql -u root -p123 进入mysql的命令行模式
注意:-p后面跟着的是密码。
步骤三
输入命令修改相关机密方法:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
这里的password是你正在使用的密码。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
更新一下用户的密码这里的password为你修改的新密码。
FLUSH PRIVILEGES;
刷新权限,使自己的修改生效。
这时发现还是连接不上。
我们先输入use mysql;命令,然后输入select user,host,plugin from user where user='root';命令。
我们发现刚刚修改的是localhost,对于非本机的连接密码校验规则还是没有变。
步骤四
我们再依次执行下面三条命令:
alter user 'root'@'%' identified by 'password' password expire never;
alter user 'root'@'%' identified with mysql_native_password by 'root';
flush privileges;
为了确定下,重新查一下,select user,host,plugin from user where user='root';
修改好了,再用本机的windows电脑访问数据库。