docker mysql初始化多个sql脚本
发布时间:2020-04-29 10:55:16编辑:admin阅读(1070)
一、概述
现有一台服务器,需要部署mysql。其中mysql容器,需要在第一次启动时,执行多个sql文件。文件名说明执行顺序
init.sql创建数据库以及用户1
users.sql用户表2
role.sql用户角色3
注意:必须严格按照执行顺序来执行,不能错乱。
有些人可能会问:为啥不把这3个sql文件合并成1个sql?答案是可以的。假设有上万个用户,那么这个sql文件就会很大,后期维护不方便。
那么可不可以让一个sql文件,执行另外3个sql文件呢?答案是可以的。这样就可以控制sql文件的执行顺序。比如:source /opt/sql/init.sql;
use test;
source /opt/sql/users.sql;
source /opt/sql/role.sql;
二、容器演示
环境说明
操作系统:centos 7.6
docker版本: 19.03.8
docker-compose版本: 1.24.1
目录结构
/opt/mysql_test 目录结构如下:./
├── docker-compose.yml
└── mysql
├── dockerfile
├── init
│ └── init.sql
├── mysqld.cnf
└── sql
├── init.sql
├── role.sql
└── users.sql
docker-compose.ymlversion: '3'
services:
mysql:
image: mysql:1
container_name: mysql
build: ./mysql
volumes:
- /data/mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d/
- ./mysql/sql:/opt/sql
environment:
- MYSQL_ROOT_PASSWORD=abcd1234
ports:
- "3306:3306"
restart: always
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
说明:将sql文件放到容器中的 /docker-entrypoint-initdb.d/ 目录,就会在mysql第一次启动时执行。之后重启容器不会重复执行!
如果此目录放置多个sql文件,它执行时是没有顺序的。因此,这个目录只放一个init.sql,专门用来控制执行sql顺序的。
mysql/dockerfileFROM mysql:5.7
ADD mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
mysql/init/init.sqlsource /opt/sql/init.sql;
use t