TICDC同步咨询,三个集群1主2从(A->B,A->C同步),如何切换成A->B->C的同步

【TiDB 使用环境】生产环境
【TiDB 版本】
【操作系统】
【部署方式】
【集群数据量】
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
问题:三个集群1主2从(A->B,A->C同步),如何切换成A->B->C的同步
我有一个A(5.1)实例有2个从集群,通过TICDC同步B(7.5)/C(7.5)。目前同步架构是如下:
A->B, A->C。
因为我计划升级完成后未来下线A集群,并把B做为主库,C做为B的从库(即B->C)。
我是否可以这样操作?

  1. 停止A->C的 CDC同步,记录点位。
    “tso”: 460530332467200001 ,“checkpoint”: “2025-09-02 11:30:00”
  2. 开启B->C的 CDC同步,使用刚才停的点位
    “checkpoint”: “2025-09-02 11:30:00”
  3. 停止A->B的同步并下线A。

【资源配置】
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

1 个赞

我尝经有过类似的场景,这样操作发现有数据一致的问题:
1)B->C 是主从一直实时同步。
2)B要新增一个A实例的a库。我使用A实例a库的全量备份,br备份分别还原到B实例/C实例。
3)新增B.a->C.a的增量同步。
4)开启A.a->B.a的增量实时同步。
5) 比较B.a 和C.a 的数据。

发现B.a 和C.a 的数据没有完全一致(B.a=A.a,B.a>C.a),然后只好使用B.a的全备导入C.a再重新同步。B.a->C.a;

1 个赞

不行。
a-> c tso,checkpoint记录是a的,a-> b tso,checkpoint记录也是a的
b-> c 需要有记录b的tso和checkpoint
重新做一个b → c 的同步吧

1 个赞

找不到对应关系就停机搞。
不能停机的话,重做确实是一个办法。

1 个赞

这个没有做过。之前做个 mysql原生复制的A->B–>C拆成A->B,A->C;
思路:
1、A停止写入
2、等待B,C应用了所有的A的binlog
3、记录A的binlog,pos
4、change master to A

1 个赞

这个可以,A停止写入。不就相当于停机了么。3套集群全部不会有新数据。然后直接修改就行

1 个赞

这个案例,B.a 的增量没有同步到 C.a,比较奇怪,回头试试;

1 个赞

感谢老师分享

1 个赞
  1. 暂停A->B, 记录tso1
  2. 暂停A->C, 记录tso2, 保证tso2 > tso1
  3. 设置A->B的结束tso为 tso2, 启动A->B 同步, 追到tso2后会自动停止同步, B库和C库版本数据一致
  4. 建立B->C的cdc同步
  5. 删除A->B, A->C 的同步, 新建A->B的同步,起始tso为 tso2

搞定!

1 个赞

思路清晰,就是太麻烦了点儿

不停机搞的话,需要非常注意数据的tso序列情况了哦

赞同这个解决方案。复杂事情简单做。

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。