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

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

耗子上树撵猫 2021-10-14

问题出现原因:

我的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的连接信息,并启动服务时,服务报SQLTransientConnectionException错误:

我在网上搜索了关键句RSA public key is not available client side (option serverRsaPublicKeyFile not set)结果原因说是:用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护。给出的处理方案是:在连接中通过 ServerRSAPublicKeyFile 指定服务器的 RSA 公钥,或者AllowPublicKeyRetrieval=True参数以允许客户端从服务器获取公钥。

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

但是并没有解决了问题。。。。。

问题解决方案:

在知道是由于MySQL认证方式导致的该问题出现的原因后,我又查了一下相关信息,大致知道了问题所在,由于docker 在拉取镜像时没有指定版本的话默认是拉取最新版本。

而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

4、选择要使用的数据库

use mysql

5、查看plugin设置

select host, user, plugin from user;

可以看到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 ‘密码’;

  1. 刷新权限
    FLUSH PRIVILEGES;

6、退出,重启服务

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值