前言
用于帮助大家解决问题,拒绝转载
问题
无法加载身份验证插件“caching_sha2_password”
Authentication plugin 'caching_sha2_password' cannot be loaded
原因
- 这个问题一般是出现在
mysql 8.0
上,并且是将5.7及以下版本的mysql的数据、日志或配置文件等交由了8.0来使用- 这是由Mysql
用户加密规则
引起的,Mysql新版本的用户加密规则发生了变化,Mysql在5.7及之前的版本的关于password的加密方法都是使用的mysql_native_password
,不过到MySQL8.0的时候换成了caching_sha2_password
在Mysql的配置文件中有这么项配置:
default-authentication-plugin
,这个参数后面跟的是用户加密规则
- 在你安装了mysql服务的系统上找到mysql的配置文件,
windows
上叫my.ini
,linux&unix
上叫my.cnf
;至于安装路径取决于你安装的版本和路径,可以直接搜索文件名来找到它。
3种解决方法:
- 登录mysql,使用语句修改
- 如果是宿主机装的mysql那就直接连:
# windows下WIN+R打开黑窗口 linux&unix直接输入 mysql -u mysql用户名 -p 密码 # Linux&unix&docker下 登录mysql mysql -u mysql用户名 -p 密码 # 查看用户加密规则 select host,user,plugin,authentication_string from mysql.user
- 查询结果如下
- 修改密码并启用新的加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 修改配置文件
- Docker下找配置文件
# 查询mysql的容器id docker ps -a
- 进入容器(未映射配置文件的情况下,映射了的话直接修改宿主机映射过来的my.cnf,修改完重启mysql容器即可)
docker exec -it 容器id bash
- 一般存放路径都在
/etc/mysql/my.cnf
不过版本不同存放路径可能不一样,根据你版本的目录找一下 - 打开配置文件,在尾行修改或增加内容如下
default-authentication-plugin=mysql_native_password
- 在
docker-compose.yml
的command
中指定好用户连接规则并且忽略docker的安全验证,此时当容器就会带着这个参数启动(.yml
已简化,看重点就行)version: '3.7' services: mysql: restart: always image: mysql container_name: mysql ports: - 3306:3306 command: # 设置协议认证方式(加密方式) --default-authentication-plugin=mysql_native_password