我使用的是 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 命令导入一个大的数据文件,或者做一些更复杂的逻辑判断。

标签: docker, docker-compose, mysql

添加新评论