navicat 连接不上虚拟机上的mysql容器 client does not support authentication protocol requested by server; consid

一.通过查看网上别人遇到的相关问题,发现是由于navicat版本的问题,出现连接失败的原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。并提供了两种解决方案

1.升级navicat,由于navicat是收费的,个人感觉升级会比较麻烦点。

2.把用户密码登录的加密规则还原成mysql_native_password这种加密方式,本人选择第二种解决方案
二.解决问题

使用docker exec -it lnmp_mysql bash 进入登录mysql

mysql -u root -p"123456"输入密码

navicat 连接不上虚拟机上的mysql容器 client does not support authentication protocol requested by server; consid

 修改密码加密规则

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;

navicat 连接不上虚拟机上的mysql容器 client does not support authentication protocol requested by server; consid

查询表中的相关信息 select user,host,plugin from user where user='root';

navicat 连接不上虚拟机上的mysql容器 client does not support authentication protocol requested by server; consid

 

这时发现了问题,原理刚刚修改的是localhost,对于非本机的连接密码校验规则还是没有变。

 alter user 'root'@'%' identified by 'password' password expire never;//这里的password是你正在使用的密码

 alter user 'root'@'%' identified with mysql_native_password by 'why';//why是自己新修改的密码。

 flush privileges;再次刷新一下权限配置。

navicat 连接不上虚拟机上的mysql容器 client does not support authentication protocol requested by server; consid

再用宿主的window电脑访问数据库。

 navicat 连接不上虚拟机上的mysql容器 client does not support authentication protocol requested by server; consid