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 功能:

    1. [syncer.relay]
    2. log-dir = "/dir/to/save/log"
    3. # 单个 relay log 文件大小限制(单位:字节)。
    4. # 超出该值后会将 binlog 数据写入到下一个 relay log 文件。