使用什么方式进行全量同步?在全量同步完之后,在创建增量同步的时候,怎么确定增量同步的start-ts的值?求高手们指点一下!多谢!如果这个start-ts值小了,就会有重复记录,如果大了,就会遗漏数据。
不管是用dumpling还是br导出全量都会记录一个ts,用这个去接增量就可以
主要还是想用代码的方式来实现全量+增量,如果数据量比较大dumpling可能也不方便,还涉及到目标端数据库的表结构创建等。
全量用其他方式,这个主要是用来增量
先br做全量,然后cdc增量
这个就是脚本啊,把手动变成自动化的,具体步骤都是一样,就是加各种状态检查
正解,全量备份的BackupTs作为cdc的start-ts
1.问题:使用什么方式进行全量同步?
答:
- 基量数据如果不大,比如在 GB级别,可以使用 dumpling 并发导出工具导出,lightning 物理或逻辑导入方式写入下游集群。
- 基量数据如果在 TB级别,建议使用 BR工具进行物理备份,并且在下游使用 BR 物理恢复。这里需要用到 S3 作为外部存储,需求提前申请和准备好。
2.问题:怎么确定增量同步的start-ts的值?
答:
- 如果使用的是BR工具备份,那么在它备份元数据或者输出日志里,会有一个BackupTS,这个时间戳表示物理备份的最后时刻。你搭建同步任务的时候,可以以这个时间戳加1为起点,配置同步任务即可。
- 如果你用的是 dumpling 工具导出数据,在导出的数据目录里会有一个 metadata 文件,里面会记录导出数据的TSO,可以以它加1作为start-ts的值。
3.问题:start-ts值小了,就会有重复记录,如果大了,就会遗漏数据。
答:其实TiCDC同步数据时可重入的,只要你的表有唯一键(主键或者普通唯一键),那么在遇到相同的数据时,会用最新的去覆盖它。TiCDC是通过 safe_mode 来控制这个行为,比如遇到相同数据时会把insert或update转为replace语句,实现可重入操作。
所以,如果你的start-ts的值是小了,不会造成重复记录(前提表要有唯一键);start-ts的值大了,确实会丢数据。
所以,只要start-ts的值小于等于你导出数据的快照时间戳,即可正常搭建同步流。
取 start_ts 小点就行了,ticdc 要求必须有主键,它的操作是幂等的
回答的好细 大佬
全量同步
- 使用 DM 进行全量同步:
- DM 支持从 MySQL、MariaDB、Amazon RDS、Aurora 等数据库进行全量同步到 TiDB。
- 使用 DM 的
full-mode
,可以完成全量数据迁移。 - 全量同步完成后,DM 会自动切换到增量同步模式。
- 使用 TiCDC 进行全量同步:
- TiCDC 支持从 TiDB 集群同步数据到另一个 TiDB 集群或兼容的下游系统。
- TiCDC 不直接支持全量同步,但可以通过暂停 TiDB 的写入操作,然后使用 TiDB 的
BR
(Backup & Restore) 工具进行全量备份,再将备份数据恢复到目标 TiDB 集群,最后启动 TiCDC 同步增量数据。
确定增量同步的 start-ts
增量同步的 start-ts
(起始时间戳)是一个非常重要的参数,它决定了增量同步从哪个时间点开始。正确选择 start-ts
可以避免数据重复或遗漏。
- 使用 DM:
- DM 工具在全量同步完成后会自动记录一个
checkpoint
(检查点),这个检查点的时间戳就是增量同步的start-ts
。 - 如果需要手动设置
start-ts
,可以在 DM 的任务配置文件中指定。
- 使用 TiCDC:
- TiCDC 同步时,
start-ts
可以通过查询 TiDB 的cdc cli
工具获取。 - 使用
cdc cli
的changefeed query
命令可以查看现有的同步任务信息,包括start-ts
。 - 如果需要手动设置
start-ts
,可以在创建 Changefeed 时通过--start-ts
参数指定。
避免 start-ts 设置不当
- 避免
start-ts
设置过小:这可能会导致同步重复数据。确保start-ts
是全量同步完成后的时间点。 - 避免
start-ts
设置过大:这可能会导致数据遗漏。确保start-ts
不大于全量同步完成后的第一个增量数据的时间戳。
安全措施
- 在设置
start-ts
之前,确保全量同步已经完成,并且没有任何新的写入操作。 - 在开始增量同步之前,可以备份目标 TiDB 集群,以防万一需要回滚。
8.1 之后支持 Debezium,就可以支持你的想法了…
但是下游的系统或者服务,需要对接 Debezium 的事件处理了
ticdc api中没有看到safe_mode相关信息
TICDC不推荐使用
为什么在上游使用了 TiDB Lightning 物理导入模式和 BR 恢复了数据之后,TiCDC 同步会出现卡顿甚至卡住?
目前 TiCDC 尚未完全适配 TiDB Lightning 物理导入模式 (Physical Import Mode) 和 BR,请避免在使用 TiCDC 同步的表上使用 TiDB Lightning 物理导入模式和 BR。否则,可能会出现未知的错误,例如 TiCDC 同步卡住、同步延迟大幅增加、或者同步数据丢失。
flink-cdc说是支持tidb的全量复制+增量复制,它的全量+增量复制不知道是怎么做的?好像用到了tidb的快照功能,tidb支持快照吗?
不靠谱…
如果你需要全量 + 增量的话,可以试试 tidb 8.1.0 这个版本,看看 TICDC 怎么开启 Debezium支持的
Debezium 默认是支持全量 + 增量的
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。