TiDB Binlog Relay Log
Drainer 同步 binlog 时会拆分上游的事务,并将拆分的事务并发同步到下游。在极端情况下,上游集群不可用并且 Drainer 异常退出后,下游集群(MySQL 或 TiDB)可能处于数据不一致的中间状态。在此场景下,Drainer 借助 relay log 可以确保将下游集群同步到一个一致的状态。
下游集群达到一致的状态是指:下游集群的数据等同于上游设置了 的快照。
查询下游 checkpoint 表的示例如下:
Drainer 开启 relay log 后会先将 binlog event 写到磁盘上,然后再同步给下游集群。如果上游集群不可用,Drainer 可以通过读取 relay log 把下游集群恢复到一个一致的状态。
如果 Drainer 启动时无法连接到上游集群的 PD,并且探测到 checkpoint 的 consistent = false
,此时会尝试读取 relay log,并将下游集群恢复到一致的状态。然后 Drainer 进程将 checkpoint 的 consistent
设置为 true
后主动退出。
Relay log 的清理(GC)机制
在 Drainer 中添加以下配置来开启 relay log 功能:
[syncer.relay]
log-dir = "/dir/to/save/log"
# 单个 relay log 文件大小限制(单位:字节)。
# 超出该值后会将 binlog 数据写入到下一个 relay log 文件。