川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

启动Docker容器时,MySQL数据库进行初始化

作者:川石学院 日期:2022-08-23 17:44:56 点击数:

一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“启动Docker容器时,MySQL数据库进行初始化”。

mysql API如何利用loadrunner进行性能测试(图1)

  Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行。那么怎么初始化 SQL脚本以及数据呢?

  我这里有两个传统方案。 第一种方案是在容器启动后手动导入,太low了不行。第二种在Spring Boot客户端连接Mysql容器时初始化数据库,你可以参考使用flyway进行数据库版本控制一文,但是这依赖客户端的能力。能不能做到Mysql容器启动时就自己初始化数据库呢?当然可以!今天就来演示一下。

  原理

  当Mysql容器首次启动时,会在 /docker-entrypoint-initdb.d目录下扫描 .sh,.sql,.sql.gz类型的文件。如果这些类型的文件存在,将执行它们来初始化一个数据库。这些文件会按照字母的顺序执行。默认情况下它们会初始化在启动容器时声明的 MYSQL_DATABASE变量定义的数据库中,例如下面的命令会初始化一个REGION_DB 数据库:

  $ docker run --name some-mysql -e MYSQL_DATABASE=REGION_DB -d mysql:tag

  如果你的启动命令没有指定数据库那么就必须在数据库DDL脚本中声明并指定使用该数据库。否则就会实现下面的异常:

  ERROR 1046 (3D000) at line 7: No database selected

  那么接下来我们将利用这一机制来实现Docker容器启动时初始化数据库。

  自定义Dockerfile

  我们编写自己的Dockerfile来实现我们的需求,这里以 Mysql:5.7 为例。不同的版本可能有一定的出入,需要详细去阅读官方文档。脚本如下:

  FROM mysql:5.7

  LABEL OG=felord.cn

  COPY utf8mb4.cnf /etc/mysql/conf.d/utf8mb4.cnf

  COPY ./sql /tmp/sql

  RUN mv /tmp/sql/*.sql /docker-entrypoint-initdb.d

  RUN rm -rf /tmp/sql

  •   第一步,引入官方 Mysql:5.7 Docker镜像。

  •   第二步,无实际意义,主要是作者、组织信息。

  •   第三步,很重要!本来我没有配置第三行,结果运行容器后发现初始化数据的中文全部乱码了。所以需要在初始化数据库前修改Mysql的编码等配置,这里我顺便把时区也改为了+8:00。

  •   第四步,复制包含数据库脚本的 ./sql文件夹到镜像的/tmp/sql下。

  •   第五步,使用 mv 命令把第四步拷贝的文件夹下的所有.sql文件复制到 /docker-entrypoint-initdb.d下,这样才能利用2.章节的机制进行初始化数据库。

  •   第六步,删除使用过的临时目录。

  然后你可以通过构建镜像命令构建自定义的Mysql镜像:

  # 一定不要忘记最后的一个 . 点

  docker build -t mysql:5.7c .

  通过mysql:5.7c镜像启动一个名称为mysql-service的容器,root密码为123456,并持久化数据到宿主机 D:/mysql/data下:

  请在文本框输入文字

  docker run --name mysql-service -v d:/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7c

  小贴士:你可以通过 SHOW VARIABLES LIKE 'character%' 查看字符集是否更改为utf8mb4,也可以通过SHOW VARIABLES LIKE '%time_zone%' 查看时区是否是东八区。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-08-23 17:44:56
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-08-23 17:44:56
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-08-23 17:44:56
  • 建筑工程专业朱同学成功转行为软件测试人!2022-08-23 17:44:56
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-08-23 17:44:56
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-08-23 17:44:56
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-08-23 17:44:56
  • 文科生转行软件测试照样拿下高薪15K!2022-08-23 17:44:56
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-08-23 17:44:56
  • 毕业1年,迷茫的他最终选择转行软件测试2022-08-23 17:44:56