今天在虚拟机上使用docker安装了mysql(默认拉取了最新的mysql版本),端口映射后再本地使用navicat for mysql连接的时候报错:
说是客户端不支持服务器要求的认证插件
进入mysql容器,输入如下命令查看系统用户对应的认证插件
可以看到当前版本root用户使用的plugin是caching_sha2_password,mysql官方网站有如下说明:
https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
也就是说8.0的默认认证插件是caching_sha2_password,而不是之前的mysql_native_password. 使用8.0的mysql就必须使用支持此插件的客户端版本。
plugin的作用之一就是处理后的密码,不同的plugin处理后密码的格式和长度是不一样的,类似于使用MD5加密和使用base64加密,对于同一个明文处理后的格式是不一样的。
我们可以升级navicat驱动或者把mysql用户登录密码加密规则还原成mysql_native_password.
这里采用第二种方式
mysql官方网站提供了从当前caching_sha2_password降级到mysql_native_password,我们可以仿照这个
在mysql服务端执行
#1.修改root的密码为'123456' 2.使用mysql_native_password对新密码进行编码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
修改后再使用客户端登录成功