等一分钟
1
【 TiDB 使用环境】生产环境
【 TiDB 版本】 6.5.1
【复现路径】
源端是mysql主备
ip1: 10.10.10.1 当前binlog mysqld-bin.000010 60000
ip2: 10.10.10.2 当前binlog mysqld-bin.000020 80000
VIP: 10.10.10.3
DM同步连接10.10.10.3,发mysql主备发生切换 之后 ,binlog的位置发生了变化,同步就报错了
使用gtid能解决吗
h5n1
(H5n1)
2
如果 DM-worker 连接的 VIP 需要指向新的 MySQL 实例,需要按以下步骤进行操作:
- 使用
query-status
命令获取当前 binlog replication 处理单元已复制到下游的 binlog 对应的 GTID sets (syncerBinlogGtid
),记为 gtid-S
。
- 在将要切换到的 MySQL 实例上使用
SELECT @@GLOBAL.gtid_purged;
获取已经被 purged 的 binlog 对应的 GTID sets,记为 gtid-P
。
- 在将要切换到的 MySQL 实例上使用
SELECT @@GLOBAL.gtid_executed;
获取所有已经执行成功的事务对应的 GTID sets,记为 gtid-E
。
- 确保满足以下关系,否则不支持将 DM-worker 连接切换到相应的 MySQL 实例:
-
gtid-S
包含 gtid-P
(gtid-P
可以为空)
-
gtid-E
包含 gtid-S
- 使用
pause-task
命令暂停所有运行中的数据迁移任务。
- 变更 VIP 以指向新的 MySQL 实例。
- 使用
resume-task
命令恢复之前的数据迁移任务。
https://docs.pingcap.com/zh/tidb/stable/usage-scenario-master-slave-switch
等一分钟
8
将要切换的实例,如果不存在了,无法查询 SELECT @@GLOBAL.gtid_purged; SELECT @@GLOBAL.gtid_executed
是不是就没有办法了啊
等一分钟
10
用的是阿里云的RDS高可用版本,发生oom之后 ,原主实例就销毁了,重新拉起了一个实例
等一分钟
12
切换之后 ,这个binlog在新的主上不存在,跳不过去
等一分钟
14
是我操作的不对吗, 开启gtid之后 ,应该与binlog的文件名与position没有关系了吧
h5n1
(H5n1)
17
binlog要没了中间会有缺失啊,还是重新初始化数据靠谱。
等一分钟
18
binlog没有缺失,只是主节点与备用节点上的binlog名称不一样,比如现在主节点上同步的mysql-bin.000509 这个 文件,切换 之后 ,mysql-bin.000509在现在的主节点上没有这个文件名,但是数据是同步的