目录
远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
概述
下面的环境不重要,重要的是你的 MySQL可视化工具(以 sqlyog 为例)和 MySQL 服务密码校验规则是否一致,mysql 5.7 默认密码校验规则是 mysql_native_password,MySQL 8.0 时默认为 caching_sha2_password,你可以进入MySQL ,使用 SELECT Host, User, plugin from mysql.user; 查看。
一、环境
系统:centos9
docker:18.09.1
mysql : least >= 8.0.20
sqlyog: 12.0.8-0
二、问题描述
今天试了一下在docker容器安装mysql,结果远程连接报错
远程连接docker 下的MySQL错误如下,即 无法加载插件缓存sha2密码,在MySQL 8.0中,caching_sha2_password是默认的身份验证插件,而不是mysql_native_password,服务器可以正常连接,本地cmd窗口 mysql -h xx.xx.xx.xx -P 3306 -u root -p 123456 可以正常连接,所以我猜测是我的sqlyog版本太旧了
三、解决方法
有两种解决办法,一种就是升级sqlyog
,一种是修改mysql默认身份验证插件
,
第一种 升级SQLyog
我原来的版本为 SQLyog-12.0.8-0.x64
默认身份验证与mysql8.0
以上不符,SQLyog-13.1.6-0.x64
默认支持mysql8.0
以上身份验证
百度网盘:SQLyog-13.1.6-0.x64Community.exe
链接: https://pan.baidu.com/s/1aE2HqJjO0xHymaobHyw9qQ
提取码: md3j
SQLyog-12.0.8-0.x64
SQLyog-13.1.6-0.x64
第二种 修改身份验证插件
如果你也是docker mysql错误
,使用以下命令进入mysql容器
,否则跳过下面两行命令直接进入修改MySQL密码策略
# 运行mysql, -d 守护线程保持后台运行
# -p 端口映射,如果你用的阿里云服务器,需要开放安全组(即端口号,自行设置,我的是33066)
# -e 环境配置,此处设置登录密码
# --name 为镜像重命名,不然系统会随机生成,重命名在你重启关闭删除直接使用名字会方便很多
# -v 挂载目录,主要挂载MySQL配置文件以及数据
docker run -d --restart=unless-stopped -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql mysql
# 进入容器
docker exec -it mysql /bin/bash
修改 mysql 密码策略
1. 登录mysql
mysql -h localhost -u root -p
注意:MySQL版本
更新很快,你可以直接尝试使用ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'
;该命令修改身份验证插件,如果修改成功,不用执行下面操作(初始化MySQL密码
尽量设置复杂一点可以减少很多问题)
2. 进入mysql依次执行如下命令
如果你需要使用远程登录,将localhost
改为%
,下面的‘123456
’使用你自己的密码
# 修改本地登陆
# 修改密码过期规则----》永不过期
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
# 更新用户的密码修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
# 重置密码(==非必须==)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# 修改远程登陆
# 修改密码过期规则----》永不过期
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
# 更新用户的密码修改加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
# 重置密码(==非必须==)
ALTER USER 'root'@'%' IDENTIFIED BY '123456';
如果报密码过期策略问题
这个是指你设置的密码太简单了,设置复杂一点,特殊字符,字母大小写,数字正常 如:@Admin.951753
(如果你是新建用户报上面问题,只能使用此方法,如果创建成功想改简单密码可使用下面方法)
执行下面命令,将密码规则修改简单,不建议
SHOW VARIABLES LIKE 'validate_password%'; # 查看密码策略。 默认 MEDIUM
# set global validate_password.length=4; # 将密码位数设置为 4
set global validate_password.policy=LOW; # 密码策略修改为LOW,原值为MEDIUM
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
3. 查看修改结果
SELECT Host, User, plugin from mysql.user;
至此本地和远程root用户密码策略修改完毕,若想修改其他用户,仿照上面命令设置。
远程连接测试
结果成功!!!