出现这种异常的根本原因是:
mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。
由于我在拉取mysql镜像时,没有指定版本,所有默认拉取最新版本(我拉取的是8.x版本的)这就使得低版本的Navicat for MySQL或者SQLyog无法远程连接mysql。
主要有两种解决办法:
(1)降低docker拉取的mysql镜像版本号(我这里把版本号降级为5.7.25)
1.1拉取镜像:
docker pull mysql:5.7.25
1.2 运行容器:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=20182022 mysql:5.7.25
docker run -p 3306:3306 --name mysql -v /web/mysql/conf:/etc/mysql/conf.d -v /web/mysql/logs:/logs -v /web/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=20182022 -d mysql:5.7.25
至此,再用Navicat for MySQL或者SQLyog成功远程连接mysql !!!
2.另外一种方法是使用最新版本的Navicat for MySQL或者SQLyog远程连接mysql
在这里就不做介绍了。
另外这篇博客的博主更为详细地描述了解决方案:
因篇幅问题不能全部显示,请点此查看更多更全内容