docker环境部署mysql自动初始化数据
我使用的是 docker-compose 来部署环境,其他方式的 docker 部署都是一样的
先准备一个目录
mysql-init-demo/
├── docker-compose.yml # Docker Compose 配置文件
└── init/ # 存放初始化脚本的文件夹
└── init.sql # 我们的 SQL 初始化脚本
在 init.sql 写上你需要导入的 sql 内容,记得没有库你需要创建先
-- 创建数据库
CREATE DATABASE IF NOT EXISTS `xxxx` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 使用数据库
USE `xxxx`;
-- 在下面的都是你自己的 sql 内容
在 docker-compose.yml 中关于 mysql 内容块中加入下面的内容
services:
# ----------------------------------------------------------------
# MYSQL
# ----------------------------------------------------------------
mysql-init-sql:
container_name: mysql-init-sql
volumes:
- ./init-sql:/docker-entrypoint-initdb.d
... 其他的都是你自己的文件内容
这下面的内容需要看
- 初始化脚本只在数据库第一次创建时执行。如果你想重新执行初始化,必须彻底删除容器和它关联的数据卷。(如果已经有其他数据库了记得备份啊)
- 如果
/docker-entrypoint-initdb.d
目录下有多个文件,它们会按 字母顺序 执行。你可以使用01-schema.sql
,02-data.sql
这样的命名方式来控制执行顺序。 - 除了
.sql
文件,你还可以放入.sh
脚本文件。例如,你可以用 shell 脚本来执行mysql
命令导入一个大的数据文件,或者做一些更复杂的逻辑判断。