迁移主从复制的三个mysql容器
本文最后更新于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 执行相同操作
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇