本文记录如何用 MySQL 自带的导入导出工具(mysqldump/mysql)在 Docker 环境下进行“容器到容器”的数据库迁移。示例数据库名为 dateplan,容器名为 dateplan-db

docker composer 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
services:
dateplan-db:
image: mysql
container_name: dateplan-db
environment:
MYSQL_ROOT_PASSWORD: iehtian
MYSQL_DATABASE: dateplan
MYSQL_USER: dateplan_user
MYSQL_PASSWORD: dateplan_pass
ports:
- "3308:3306"
volumes:
- dateplan-db-data:/var/lib/mysql
restart: unless-stopped
volumes: dateplan-db-data:ubuntu

把这个 docker 容器连同数据一并迁移至另一个服务器

1.在旧服务器(Current Server)备份数据
首先,在当前目录下运行以下命令,将数据库导出为一个 SQL 文件。

1
2
3
# 使用 docker exec 执行内部的 mysqldump
# 密码即 docker-compose 中配置的 MYSQL_ROOT_PASSWORD
docker exec dateplan-db mysqldump -u root -piehtian dateplan > dateplan_backup.sql
  1. 传输文件到新服务器
    你需要传输两个文件:docker-compose.yml 和 dateplan_backup.sql。
1
2
# 假设新服务器 IP 为 1.2.3.4,用户名为 user
scp docker-compose.yml dateplan_backup.sql [email protected]:~/booking_system/
  1. 在新服务器(New Server)启动并恢复
    登录到新服务器,进入目录:
1
2
3
4
5
# 1. 启动容器
docker-compose up -d
# 2. 等待几十秒,确保 MySQL 完全启动(查看日志确认:docker logs dateplan-db)
# 3. 导入数据
cat dateplan_backup.sql | docker exec -i dateplan-db mysql -u root -piehtian dateplan