MySQL 报Public Key Retrieval is not allowed 错误问题解决

MySQL 报Public Key Retrieval is not allowed 错误问题解决

  • 问题出现原因:
  • 问题解决方案:

问题出现原因:

我的MySQL是使用docker的docker pull mysql命令直接拉取MySQL的镜像,并使用docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql创建的docker容器运行的MySQL。

​ 这个时候问题就出现了,我在本机上使用Navicat15能正常连接我Linux上的MySQL服务:
MySQL 报Public Key Retrieval is not allowed 错误问题解决_第1张图片
而当我在服务中配置好MySQL的连接信息,并启动服务时,服务报SQLTransientConnectionException错误:
MySQL 报Public Key Retrieval is not allowed 错误问题解决_第2张图片
我在网上搜索了关键句RSA public key is not available client side (option serverRsaPublicKeyFile not set)结果原因说是:用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护。给出的处理方案是:在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥。

所以我也尝试在连接后面添加了 allowPublicKeyRetrieval=true

MySQL 报Public Key Retrieval is not allowed 错误问题解决_第3张图片
但是并没有解决了问题。。。。。

问题解决方案:

在知道是由于MySQL认证方式导致的该问题出现的原因后,我又查了一下相关信息,大致知道了问题所在,由于docker 在拉取镜像时没有指定版本的话默认是拉取最新版本。
MySQL 报Public Key Retrieval is not allowed 错误问题解决_第4张图片
而MySQL在版本8.0之后默认的认证方式都更改为了caching_sha2_password,而我们服务并没有配置sha2相关的插件,所以服务启动时报错。而网上比较流行的解决方式就是改为之前的认证方式:

1、启动MySQL容器

docker start mysql

2、进入容器内部

docker exec -it mysql /bin/bash

3、登录mysql

mysql -u root -p

MySQL 报Public Key Retrieval is not allowed 错误问题解决_第5张图片

4、选择要使用的数据库

use mysql

MySQL 报Public Key Retrieval is not allowed 错误问题解决_第6张图片

5、查看plugin设置

select host, user, plugin from user;

MySQL 报Public Key Retrieval is not allowed 错误问题解决_第7张图片

可以看到root的plugin是caching_sha2_password,我们希望改成mysql_native_password

而这里总共有两个root,一个代表的是远程连接,一个是本地连接,所以根据自己需求修改。

5、修改认证方式

本地:ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY '密码';
远程:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码';

MySQL 报Public Key Retrieval is not allowed 错误问题解决_第8张图片

6、退出,重启服务

希望有所帮助!

你可能感兴趣的:(问题解决,docker,mysql,linux)