背景介绍

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

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

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

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

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

原因

回到公司,找到同事,发现报错如下: “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

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

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

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

完成后效果如下:

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

更为优雅的解决方案

又重新回到了 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://stackoverflow.com/questions/49194719/authentication-plugin-caching-sha2-password-cannot-be-loaded

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

修改 Docker-MySQL 容器的 默认用户加密规则的更多相关文章

  1. docker mysql容器的安装使用

    docker拉取镜像的命令为 docker pull image[:TAG] 如果我们想安装的mysql版本不是最新的版本,则需要填充TAG,如果不带上TAG,则默认安装的为最新版本,虽然可以通过do ...

  2. 修改Docker中容器的时间和宿主主机时间一致

    修改Docker容器的时间和宿主时间一致 在查看容器的日志的,发现时间有和宿主主机时间相差有8个小时,而且宿主主机使用的是CST时间,容器容器使用的是UTC时间 主机时间 DOCKER容器的时间 世界 ...

  3. win10修改Docker Desktop Installer的默认安装目录

    Docker Desktop Installer软件默认安装会装在C:\Program Files\Docker的目录下,默认是不能修改的,但是我们可以通过设置软链接的方式把安装默认弄到其他盘 我们先 ...

  4. docker mysql 容器报too many connections 引发的liunx磁盘扩容操作

    症状每次删除mysql容器重启没两分钟又报标题错 df -h 命令查看各个挂载空间应用情况发现root home var 三个文件目录挂载的空间满了 网上百度了一下liunx磁盘扩容操作,fdisk ...

  5. Linux下正确修改Docker镜像和容器的默认存储位置,亲测有效

    我们通过 yum 的方式安装完Docker环境后,它默认的存储位置是 /var/lib/docker,默认的 pid 存放位置是 /var/run/docker.pid. 如果仅仅是做测试,我们可能没 ...

  6. Docker】如何修改Docker的默认镜像存储位置

    江湖有多大,坑就有多多……我使用的服务器, 系统盘根目录只有20G, 默认Docker 的镜像文件是安装在/var/lib/docker 目录下的, 这样的话我根本装不了太多的镜像,之前遇到一种情况就 ...

  7. docker 创建.netcore2.2 api容器 以及连接mysql容器

    1]环境说明 操作系统:Window 10 专业版 开发工具 Vs2019专业版 Docker:  Docker for Windows  docker在windows上安装完毕之后可以看到 2]拉取 ...

  8. 修改docker image存放位置

    修改镜像和容器的默认存放路径 指定镜像和容器存放路径的参数是--graph=/var/lib/docker,我们只需要修改配置文件指定启动参数即可.刚好有个300g盘的挂在/data目录上,所以在这个 ...

  9. docker mysql配置挂载到卷

    docker--将mysql配置挂载到卷 1.首先在根目录创建两个文件夹,其中config文件夹中创建my.cnf配置文件.data文件夹存放数据文件,一定要为空. /docker/mysql/con ...

随机推荐

  1. ul li列子

    <html> <body> <p>有序列表:</p> <ol> <li>打开冰箱门</li> <li>把 ...

  2. 【opencv基础】Rect类的神奇用法

    前言 最近看github上源码发现对两个cv::Rect使用相与(&)操作,猛地感觉自己蒙啦,Rect类还有这种神奇用法?!翻看opencv官网Rect类,果然如此! opencv中Rect类 ...

  3. OLED的相关信息

    有2种方式与OLED模块相连接,一种是8080的并口方式,另一种是4线SPI方式. ALIENTEK OLED 模块的 8080 接口方式需要如下一些信号线:CS: OLED 片选信号.WR:向 OL ...

  4. stm32 内部温度传感器的配置

    STM32的内部温度传感器和ADCx—IN16输入通道相连接.且温度传感器推荐采样时间为17.1us,支持的温度范围为:-40~125度,精度比较差,± 5℃左右. 计算温度值:T(℃) ={(V25 ...

  5. 设置ip地址、掩码、网关、DNS

    @echo offcolor f8mode con cols=40 lines=8echo.echo.echo      设置IP为:echo.set /p ip=              192. ...

  6. 网络流--最小费用最大流MCMF模板

    标准大白书式模板 #include<stdio.h> //大概这么多头文件昂 #include<string.h> #include<vector> #includ ...

  7. Executors Future Callable 使用场景实例

    https://www.jb51.net/article/132606.htm: 我们都知道实现多线程有2种方式,一种是继承Thread,一种是实现Runnable,但这2种方式都有一个缺陷,在任务完 ...

  8. Win8被禁购信息战由暗到明

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jhzyz/article/details/26629277 冯强/文 关于中国政府禁止採购微软Win ...

  9. 2018第52周日&技术人员如何面对裁员?

    2018的最后一周,看了汽车的两个趋势,纯电动车和自动驾驶,两个现在很火但还有很多问题要解决的方向,尤其是自动驾驶.虽然它因为一些问题当前不能完全被克服,但因它而生的各种辅助驾驶技术却被用的越来越多, ...

  10. hadoop 知识点

    HDFS 命令 命令 说明 fsck 检查文件的完整性 start-balancer.sh 重新平衡HDFS hdfs dfs -copyFromLocal 从本地磁盘复制文件到HDFS hadoop ...