mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
远程连接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; 查看
一、环境
系统: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用户密码策略修改完毕,若想修改其他用户,仿照上面命令设置。
远程连接测试
注意你新建用户时
底下评论
问题一
Host域名已经改为%,并且远程用户root的plugin也已经改为mysql_native_password,重启mysql甚至电脑后,远程连接还是报错2058,caching_sha2_password 本地连接可以
客户端也是更新到了12版本了
答案一:
mysql 5.7 ( 对应 SQLyog-12.0.8-0)默认密码校验规则 mysql_native_password
MySQL 8.0 ( 对应 SQLyog-13.1.6-0)默认密码校验规则 caching_sha2_password
其他 SQLyog 版本不了解,猜想 12 版本及以下mysql_native_password,13 及以上 caching_sha2_password,
感觉你用的 SQLyog 12 报错,应该是密码校验规则没修改成功,
还要注意在修改密码插件时要重置密码 ALTER USER ‘root’@‘%’ IDENTIFIED WITH mysql_native_password BY ‘123456’;不能使用 update 修改
问题一补充
太感谢了,我是Mysql8.0的,但是用的12版本的,更新到了13版本一下子就好了。表情包
远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)