TiCDC 实践:TiDB 到 TiDB 增量数据迁移
作者: Hacker_ 小峰原文来源:https://tidb.net/blog/f7274e70
背景
因降本等原因,需要将流量较小的 TiDB 集群下线,将数据合并到其他 TiDB 集群。
上游 TiDB 集群版本:5.4.0
下游 TiDB 集群版本:5.4.2
此次合并集群用的工具有:
dumpling 导出 + loader 导入 + TiCDC 增量数据实时同步;
TiCDC 数据同步原理可参考TiCDC 架构和数据同步链路解析 。
第 1 步:搭建环境
1、部署上下游 TiDB 集群,分别扩容 TiCDC 节点。
编写 vim scale-out-ticdc.yaml
文件:
运行扩容命令:
2、查看集群拓扑,确认上下游集群 TiCDC 节点都已经扩容完成。
第 2 步:迁移全量数据
1、关闭 GC。
2、备份数据。
使用 Dumpling 工具导出上游集群多个库的全量数据。
2.1、导出完毕后,查看备份文件, 确认多个库均已导出完成。
2.2、查看备份的点位,执行如下命令查看导出数据的元信息,metadata 文件中的 Pos 就是导出快照的 TSO,将其记录为 BackupTS:
3、恢复数据。
使用 Loader 将 Dumpling 导出的上游全量数据导入到下游 TiDB 实例:
这里也可以采用 TiDB Lightning 工具做导入 (TiDB v5.3.0
及以上可使用),为避免影响下游可使用 TiDB-backend
模式(配置文件中设置 backend = "tidb"
)。
第 3 步:迁移增量数据
1、创建 CDC 同步任务。
【编写配置文件】:
【创建同步任务】:
以上命令中:
--pd
:实际的上游集群的地址--sink-uri
:同步任务下游的地址--changefeed-id
:同步任务的 ID,格式需要符合正则表达式^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$
--start-ts
:TiCDC 同步的起点,需要设置为实际的备份时间点,也就是第 2 步:迁移全量数据中 “备份数据” 提到的 BackupTS
更多关于 changefeed 的配置,可以参考官网【同步任务配置文件】。
【查看所有任务】:
2、上游重新开启 GC。
3、查看 TiCDC 任务状态【查看指定的任务】:
【查看任务详细信息】:
【暂停任务】:
【恢复任务】:
4、校验同步情况
查看上下游数据内容是否一致;
测试过滤是否生效:上游建表,测试表 DML/DDL 是否同步到下游。
这里就不写详细过程了。
第 4 步:平滑切换业务
通过 TiCDC 创建上下游的同步链路后,原集群的写入数据会以非常低的延迟同步到新集群,此时可以逐步将读流量迁移到新集群了。观察一段时间,如果新集群表现稳定,就可以将写流量接入新集群,步骤如下:
1、停止上游集群的写业务。
2、确认上游数据已全部同步到下游后,停止上游到下游集群的 changefeed。
3、将写业务迁移到下游集群
更新库对应的数据源配置为下游新集群。
4、观察一段时间后,等新集群表现稳定,便可以弃用原集群
5、删除 TiCDC 同步任务
【删除同步任务】:
【查看所有任务】:
其他
需要关注上下游集群时区是否一致
time_zone 的默认值是 System 。
修改时区:
也可以在 JDBC 链接中指定时区 serverTimezone=Asia/Shanghai
,比如:
参考文档
https://docs.pingcap.com/zh/tidb/stable/migrate-from-tidb-to-tidb
https://asktug.com/t/topic/813124
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/ebcadb8d9fd0096415abd5c48】。文章转载请联系作者。
评论