修改 Docker-MySQL 容器的 默认用户加密规则

时间:2022-08-01 18:47:51

背景介绍

今天开始做集成测试,需要把程序和环境重新部署在新的服务器上。项目的环境都是基于Docker来的,所以数据库也是选择从Docker官网上面拉官方的MySQL镜像。(Tag = 8.0.12)

从部署到导入数据,一切正常。完事之后进入container里面简单的查了下数据的个数,em~~~ 没问题了。 于是边和测试的同事说了一声,下午可以看是集成测试了。

中午吃完发,顶着烈日出去办点事,完事之后正往回走着突然就接到了测试同事的电话。。

QA:那个XX,你的数据库部署好像有问题啊,我这边用工具连不上。。。 好吧,

我: 没问题啊,我上午检查过的。。。 好吧,我一会就回去,咱们一起看看吧。

修改 Docker-MySQL 容器的 默认用户加密规则

原因

回到公司,找到同事,发现报错如下: “Authentication plugin 'caching_sha2_password' cannot be loaded”。

问题的原因:是从MySQL8.0 开始,默认的加密规则使用的是 caching_sha2_password。 我看了下我从官方拉下来的 docker 镜像版本是8.0.12(完美中招)

解决方案

于是在网上搜了一下,很快就找到了解决方案。

1. 首先找到当前数据库用户root的加密规则

mysql>use mysql;
mysql>select user, host, plugin from user

修改 Docker-MySQL 容器的 默认用户加密规则

2. 修改加密规则为“mysql_native_password”

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

注: password 替换为 root 的密码; 或者直接更新这一行 pluggin字段 的值为 “mysql_native_password”

完成后效果如下:

修改 Docker-MySQL 容器的 默认用户加密规则

其实到了这儿,问题已经解决。 那么再想一下,既然这个设置是默认的,那么我们能不能在部署数据库的把它修改掉呢?

更为优雅的解决方案

又重新回到了 MySQL 官方在docker的仓库中,仔细的阅读了一遍官方的说明。其实,我们在启动MySQL 容器的时候,是可以修改一些设置的。主要有2种方式。1. 自定义配置文件,并 mount 到 container里。这样在MySQL启动时,会加载我们的配置文件。 2. 启动MySQL容器是传入CMD,通过命令修改默认加密规则(下面绿色部分)

# docker run -d -e MYSQL_ROOT_PASSWORD= -e MYSQL_DATABASE=weather_db -p : --name test-mysql --restart always -v  /home/ct/mysql/data:/var/lib/mysql  
mysql:8.0.12 --default-authentication-plugin=mysql_native_password

另外,还有通过 docker-compose 方式来实现的,这里就不再赘述,请参考官方描述。

OK!感谢收看,同时也欢迎大家积极留言讨论哈~~

参考

https://majing.io/posts/10000021021192

https://*.com/questions/49194719/authentication-plugin-caching-sha2-password-cannot-be-loaded

https://hub.docker.com/r/_/mysql/