启动mysql的docker镜像,怎么自动执行初始化sql脚本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了启动mysql的docker镜像,怎么自动执行初始化sql脚本相关的知识,希望对你有一定的参考价值。

参考技术A 您好,请问您是想知道启动mysql的docker镜像,怎么自动执行初始化sql脚本吗?

docker容器启动Mysql执行初始化sql脚本实现

文章目录

背景

docker容器方式启动Mysql想在启动后执行一些初始化sql脚本(如创建访问数据库的user以及赋予相应权限,执行db创建sql脚本,执行table创建的sql脚本). 且这个初始化过程全局只运行一次(比如中途停掉容器再启动,不再运行脚本,这种全局运行一次的限制,不再sql脚本里面体现). 本文详细讲解如何实现这一过程.

准备工作

本地安装docker且安装docker-compose. 机器上安装的是docker desktop, 所以 docker-compose 不用额外安装, 其他环境去github 上安装对应版本的docker-compose 即可. 其次 mysql 的 docker 镜像, 选择mysql版本是8.0.

实现过程

dockerhub 查看官方镜像mysql docker image说明
其中有一部分:

总结一下就是容器中有一个/docker-entrypoint-initdb.d 目录, 此目录可用于执行初始化脚本, 且执行顺序是按照文件名字母顺序执行. 因此再docker-compose 文件中只要挂载一个宿主机目录到容器中目录 /docker-entrypoint-initdb.d, 然后在挂载宿主机目录中添加自己的初始化脚本即可. 执行一次的保证是,容器启动会检查/var/lib/mysql 目录下是否有数据, 如果mysql不是第一次启动,那么该文件夹下就有数据,/docker-entrypoint-initdb.d 目录中脚本就不会执行; 如果mysql第一次启动,由于没有数据,所以/var/lib/mysql内容为空,初始化脚本就会执行. 当然,由于/var/lib/mysql 目录一般是挂载在宿主机器上的,所以清空该目录也可触发初始化脚本执行. 初始化脚本执行顺序是按照脚本名字的字母顺序执行, 因此可以按照1_功能.sql 命名方式去给初始化脚本命名, 比如:

1_create_user.sql
2_create_db.sql
3_create_table.sql
4_init_table_data.sql
5_xxx.sql

这样就能控制初始化脚本执行顺序.

以上是关于启动mysql的docker镜像,怎么自动执行初始化sql脚本的主要内容,如果未能解决你的问题,请参考以下文章

怎么在服务器上制作docker镜像

docker 启动 centos 镜像,容器会自动退出

用Dockerfile做docker镜像多应用启动mysql,guacd,tomcat

docker容器启动Mysql执行初始化sql脚本实现

docker容器启动Mysql执行初始化sql脚本实现

docker容器启动Mysql执行初始化sql脚本实现