在使用 Docker Compose 和 MySQL 容器时,你可以通过以下步骤指定在每次容器启动时执行数据库迁移的 SQL 文件:
1. 创建一个目录,用于存放数据库迁移的 SQL 文件,例如 `migrations`。
2. 将数据库迁移的 SQL 文件放置在该目录中,例如 `migrations/migration.sql`。
3. 创建一个 `docker-compose.yml` 文件,并定义 MySQL 服务和相关配置。在该文件中,可以使用 `volumes` 关键字将数据库迁移目录挂载到容器中的特定路径,并执行相应的初始化脚本。
```yaml
version: '3'
services:
mysql:
image: mysql
volumes:
- ./migrations:/docker-entrypoint-initdb.d
- ./data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=your_password
```
上述配置中,`./migrations:/docker-entrypoint-initdb.d` 将 `./migrations` 目录挂载到容器的 `/docker-entrypoint-initdb.d` 目录中。MySQL 容器在启动时会自动执行该目录下的 SQL 文件。
4. 在终端中,使用以下命令启动容器:
```bash
docker-compose up
```
容器将启动,并且 MySQL 服务会执行挂载的数据库迁移 SQL 文件。
注意事项:
- 确保 `docker-compose.yml` 文件和数据库迁移的 SQL 文件(`migrations/migration.sql`)在同一个目录下。
- 在 `docker-compose.yml` 文件的 `mysql` 服务中,可以根据需要自定义其他的 MySQL 配置,如数据库名称、用户名、密码等。
- MySQL 容器会在每次启动时执行 `/docker-entrypoint-initdb.d` 目录中的 SQL 文件,因此请确保该目录只包含需要执行的迁移 SQL 文件,避免执行不必要的脚本。
- 对于已经运行过的 MySQL 容器,如果需要重新执行迁移操作,可以停止并删除容器,然后重新运行 `docker-compose up`。
这样,每次启动 MySQL 容器时,指定的数据库迁移 SQL 文件都会被执行,确保数据库的迁移操作得以完成。