想要在docker中启动MySQL时自动执行初始化sql文件,可以通过以下步骤来实现:
1. 创建一个目录用于存放初始化文件
我们首先需要创建一个目录,用于存放我们的初始化sql脚本文件。
$ mkdir db_init_sql
2. 编写初始化sql脚本文件
在创建的目录下,我们需要创建一个或多个初始化sql脚本文件。这些sql文件包含了我们要在MySQL启动时执行的所有命令。假设我们已经创建了一个叫做init.sql
的文件。
CREATE DATABASE my_db;
USE my_db;
CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(30) NOT NULL,
email VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
3. 创建docker-compose.yml文件
我们要使用docker-compose来简化docker容器的管理。在目录下创建一个docker-compose.yml
文件,并添加以下内容:
version: '3'
services:
db:
image: mysql:latest
command: "--init-file /docker-entrypoint-initdb.d/init.sql"
environment:
MYSQL_ROOT_PASSWORD: "password"
volumes:
- ./db_init_sql:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
这个配置包含了以下几个部分:
image
:指定我们使用的MySQL镜像。这里我们使用最新的正式版。command
:提供给MySQL的启动命令,使用--init-file
参数指向我们在第二步中创建的初始化sql脚本文件。environment
:设置MySQL的root用户的密码。volumes
:把我们在第一步中创建的初始化sql脚本文件目录映射到MySQL容器中,在MySQL启动时执行这些sql语句。ports
:把MySQL的3306端口映射到本地主机,以便我们连接到MySQL实例。
4. 启动Docker容器
在docker-compose.yml
文件所在的目录中,运行以下命令来启动MySQL容器:
$ docker-compose up -d
示例1
我们可以通过以下方式,再创建一个sql脚本文件init2.sql
。
USE my_db;
INSERT INTO users (username, email) VALUES ('john', 'john@abc.com');
此时,需要修改docker-compose.yml
文件中command的设置,使其启动时执行init.sql
和init2.sql
文件内容。
version: '3'
services:
db:
image: mysql:latest
command: --init-file /docker-entrypoint-initdb.d/init.sql --init-file /docker-entrypoint-initdb.d/init2.sql
environment:
MYSQL_ROOT_PASSWORD: "password"
volumes:
- ./db_init_sql:/docker-entrypoint-initdb.d
ports:
- "3306:3306"
示例2
如果MySQL初始化时遇到了错误,想要重新初始化,我们需要删除容器和数据卷,然后重新启动一个新的容器。在运行以下命令来删除容器和数据卷:
$ docker-compose down -v
这个命令将会停止和删除MySQL容器及其相关数据卷。然后我们可以重新运行docker-compose up -d
来启动一个新的MySQL容器,并重新初始化数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:docker mysql启动时执行初始化sql - Python技术站