远程连接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; 查看

一、环境

系统:centos8
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 33066 -u root -p 123456 可以正常连接,所以我猜测是我的sqlyog版本太旧了,
在这里插入图片描述

三、解决方法

有两种解决办法,一种就是升级sqlyog,一种是修改mysql默认身份验证插件,

第一种 升级SQLyog

我原来的版本为 SQLyog-12.0.8-0.x64 默认身份验证与mysql8.0以上不符,
SQLyog-13.1.6-0.x64 默认支持mysql8.0以上身份验证
链接: https://pan.baidu.com/s/1PnxSc_5q_pBt74HiyrMZMA.
提取码: gu95
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 33066: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;

在这里插入图片描述
详细的MySQL密码复杂度与密码过期策略介绍参考博客
https://www.cnblogs.com/mysqljs/p/14246130.html

3. 查看修改结果
SELECT Host, User, plugin from mysql.user;

至此本地和远程root用户密码策略修改完毕,若想修改其他用户,仿照上面命令设置。
在这里插入图片描述
远程连接测试
在这里插入图片描述
注意你新建用户时
在这里插入图片描述

  • 72
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值