本文最后更新于71 天前,其中的信息可能已经过时,如有错误请发送邮件到3082654005@qq.com
第一步:检查每个容器的数据卷配置
首先,我们需要检查每个 MySQL 容器的数据卷配置:
bash
# 检查 master 容器的数据卷 docker inspect 5d82b4bbce88 | grep -A 10 -B 5 '"Mounts"' # 检查 slave01 容器的数据卷 docker inspect f20fc4697ded | grep -A 10 -B 5 '"Mounts"' # 检查 slave02 容器的数据卷 docker inspect aa53b0ae32bb | grep -A 10 -B 5 '"Mounts"'
请提供这些命令的输出,这样我可以确定每个容器的数据存储位置。
第二步:提交每个容器为镜像
bash
# 提交 master 容器为镜像 docker commit 5d82b4bbce88 mysql_master_migrated:latest # 提交 slave01 容器为镜像 docker commit f20fc4697ded mysql_slave01_migrated:latest # 提交 slave02 容器为镜像 docker commit aa53b0ae32bb mysql_slave02_migrated:latest
第三步:迁移镜像到目标服务器
bash
# 迁移 master 镜像 docker save mysql_master_migrated:latest | ssh root@106.12.191.134 'cat > /root/mysql_master_migrated.tar' # 迁移 slave01 镜像 docker save mysql_slave01_migrated:latest | ssh root@106.12.191.134 'cat > /root/mysql_slave01_migrated.tar' # 迁移 slave02 镜像 docker save mysql_slave02_migrated:latest | ssh root@106.12.191.134 'cat > /root/mysql_slave02_migrated.tar'
第四步:迁移数据卷到目标服务器
根据第一步中找到的数据卷路径,迁移每个容器的数据:
bash
# 假设数据卷路径如下(请根据实际检查结果替换): # master: /root/docker/volumes/mysql_master # slave01: /root/docker/volumes/mysql_slave01 # slave02: /root/docker/volumes/mysql_slave02 # 迁移 master 数据 tar czf - /root/docker/volumes/mysql_master | ssh root@106.12.191.134 'cat > /root/mysql_master_data.tar.gz' # 迁移 slave01 数据 tar czf - /root/docker/volumes/mysql_slave01 | ssh root@106.12.191.134 'cat > /root/mysql_slave01_data.tar.gz' # 迁移 slave02 数据 tar czf - /root/docker/volumes/mysql_slave02 | ssh root@106.12.191.134 'cat > /root/mysql_slave02_data.tar.gz'
第五步:在目标服务器上恢复容器
在目标服务器(百度云ECS)上执行以下操作:
1. 加载镜像
bash
# 加载 master 镜像 cat /root/mysql_master_migrated.tar | docker load # 加载 slave01 镜像 cat /root/mysql_slave01_migrated.tar | docker load # 加载 slave02 镜像 cat /root/mysql_slave02_migrated.tar | docker load
2. 恢复数据
bash
# 创建数据目录 mkdir -p /root/docker/volumes/mysql_master mkdir -p /root/docker/volumes/mysql_slave01 mkdir -p /root/docker/volumes/mysql_slave02 # 解压数据 tar xzf /root/mysql_master_data.tar.gz -C /root/docker/volumes/mysql_master --strip-components=4 tar xzf /root/mysql_slave01_data.tar.gz -C /root/docker/volumes/mysql_slave01 --strip-components=4 tar xzf /root/mysql_slave02_data.tar.gz -C /root/docker/volumes/mysql_slave02 --strip-components=4
3. 运行容器
由于这些容器是主从复制集群的一部分,我们需要确保它们使用不同的端口:
bash
# 运行 master 容器 docker run -d \ --name mysql_master \ -v /root/docker/volumes/mysql_master:/var/lib/mysql \ -p 3308:3306 \ -e MYSQL_ROOT_PASSWORD=your_master_password \ mysql_master_migrated:latest # 运行 slave01 容器 docker run -d \ --name mysql_slave01 \ -v /root/docker/volumes/mysql_slave01:/var/lib/mysql \ -p 3309:3306 \ -e MYSQL_ROOT_PASSWORD=your_slave01_password \ mysql_slave01_migrated:latest # 运行 slave02 容器 docker run -d \ --name mysql_slave02 \ -v /root/docker/volumes/mysql_slave02:/var/lib/mysql \ -p 3310:3306 \ -e MYSQL_ROOT_PASSWORD=your_slave02_password \ mysql_slave02_migrated:latest
4. 重新配置主从复制
由于服务器IP地址发生了变化,您可能需要重新配置主从复制:
bash
# 连接到每个从服务器并重新配置复制 docker exec -it mysql_slave01 mysql -u root -p # 在 MySQL 中执行: STOP SLAVE; CHANGE MASTER TO MASTER_HOST='mysql_master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='replication_password', MASTER_PORT=3306; START SLAVE; # 对 mysql_slave02 执行相同操作