Navicat连接docker的mysql出现1251或者2059的错误Client does not support authentication protocol requested by

问题描述

在docker上新安装的mysql的容器,使用win10的workbench可以连接访问,但是使用Navicat连接就会报错。

报错信息

在navicat11版本下报错1251Client does not support authentication protocol requested by server
image-20200721090424833

在navicat12版本下报错2059 Authentication plugin 'caching_sha2_password' cannot
image-20200721091346831

问题分析

初步分析

我记得在以前使用mysql5.7版本的容器时,是没有出现这样的问题。所以先查询了下当前mysql的版本。
在这里插入图片描述
可以看到当前mysql镜像的版本是最新版,所以版本应该是8.0.x,属于高版本。
又结合刚才出现的问题,可以看出应该是身份验证的问题出错,mysql高版本对身份验证越来越严格。

解决步骤

经过一番百度探索得知:

原因是docker mysql为最新的,更换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password),即版本不兼容问题

  1. 首先进入mysql容器,登陆到mysql
docker exec -it mysql bash;
mysql -uroot -p;
输入密码
  1. 进入mysql后,命令下更改mysql加密方式(将密码设置为永不过期模式);
alter user 'root'@'localhost' identified by 'yourpassword' password expire never;

yourpassword为你自己mysql的密码

  1. mysql_native_password设置新密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newyourpassword';

newyourpassword为你自己mysql的新密码

  1. 刷新权限让更改的数据文件立即生效;
flush privileges;

百度到的问题解决方案,到这里就可以解决问题,但是我的问题还是没有解决,继续…


还是在mysql的命令行模式下继续解决问题,(如果不在,进入mysql容器,重新登录)

  1. 使用mysql的数据库,查询其user用户的基本属性信息
use mysql;
select user,host,plugin,authentication_string from user;

在这里插入图片描述
从红线框柱的部分可以得知,第三步执行的命令已经生效,mysql的root用户在本地的navicat访问已经没有问题,但是远程连接还是报错,所以分析,只要改变root用户的 host为% 的密码加密方式即可解决问题。

扫描二维码关注公众号,回复: 11504366 查看本文章
  1. 修改root用户的 host为% 的密码加密方式,并刷新权限
alter user 'root'@'%' identified with mysql_native_password by 'yourPassword';
flush privileges;
  1. 再次查询user用户的信息
select user,host,plugin,authentication_string from user;

在这里插入图片描述
然后再用navicat连接mysql,连接成功,这样即可解决问题…

猜你喜欢

转载自blog.csdn.net/qq_42937522/article/details/107740582