TiDB binlog 数据同步,丢失数据

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0.9
  • 【问题描述】:
    5台TiDB server ,1、2、3 开启binlog,4、5没有开启binlog.对A 表的数据操作通过域名设置 LB 只向 TiDB server 1、2、3。 增量同步A 表数据binlog 到下游,发现有数据不一致的问题。
    疑问?
  1. 是否 TiDB server 没有全量开启会导致数据不一致?
  2. TiDB server 接受的数据,向下游写入 pump 组件。A 表的数据不会发送到 4、5没有开启binlog 的TiDB server,为什么会丢数据?原理是什么?有没有详细的文档参考?

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

请问数据丢失的定义是?是否有 ddl 操作呢,

A 表和同步到下游的B 表数据不一致,消费同步到kafka 中的数据,和下游B 表是一致的。 ddl 如果不是对A 表进行的操作,也会有影响吗?

看下 ddl 原理,ddl 的 owner 是在整个 tidb-server 中选举出来的。如果不是对 A 进行操作,对于 A 的数据是没有影响的,该 ddl 如果在非 LB tidb-server owner 上被执行可能不会被同步到下游,看下当前 binlog 延迟情况如何呢?

好的,十分感谢,您的帮助。

请问这个‘数据不一致’是什么根因呢?延迟吗?

不是延迟,就是少了。后面的数据已经有了,但是这个对应的数据,kafka 里消费出来没有。

是有两个drainer ,一个输出到 Kafka,一个直接写到下游,然后从 Kafka 里消费的数据和下游的数据是一致的,但是上游和下游数据库的数据是不一致的,所以怀疑是有 binlog 丢失了,是这样的吗?

上游A 表,一个 drainer 写入到kafka ,然后写入到下游B,kafka 数据消费出来和下游B一致,和上游A不一致。然后看文档发现,没有全部开启 binlog 会有数据不一致,就全部开启了。开启之后把 kafka 的数据消费写入了TiDB 测试的表test,因为 sync-diff-inspector 不支持在线对比,所以写了sql 根据逐渐 join 上游表和写入的测试表 test,对比数据的 md5 值校验,发现没有出现数据不一致的情况。但是看了 DDL 原理,感觉应该和 DDL 没关系,因为A 表没有DDL,数据只会写入开启 binlog 的 TiDB server. 虽然现在全部开启 binlog 之后没有发现有问题,但是对其中的原理不太了解,担心有问题。

之前的数据不一致的具体的判断方法是什么样的?能否复现

根据主键 id 查询上游A 表,和下游数据对比发现不一致。问题也没有复现:测试业务场景sql、排除是否有错误连接到没有开启的 binlog TiDB server、并发场景测试,都没有复现。 会出现丢失的只有在连接到没有开启 binlog 的TiDB server 的情况下,但是已经排除了这种可能。暂时也没有发现其他的问题。

1.最好能保证所有 tidb 都开启 binlog,否则很容易出现问题。

2.按照你说的不执行 DDL、只在开启 binlog 的 tidb 上写数据的情况,确实不应该会丢失数据,现在也没什么可疑的点,如果复现后保留现场我们再查吧

好的。十分感谢您的帮助。

ok~

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