明天你好lk
(明天你好lk)
1
为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:3.0.9
- 【问题描述】:
5台TiDB server ,1、2、3 开启binlog,4、5没有开启binlog.对A 表的数据操作通过域名设置 LB 只向 TiDB server 1、2、3。 增量同步A 表数据binlog 到下游,发现有数据不一致的问题。
疑问?
- 是否 TiDB server 没有全量开启会导致数据不一致?
- TiDB server 接受的数据,向下游写入 pump 组件。A 表的数据不会发送到 4、5没有开启binlog 的TiDB server,为什么会丢数据?原理是什么?有没有详细的文档参考?
若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。
明天你好lk
(明天你好lk)
3
A 表和同步到下游的B 表数据不一致,消费同步到kafka 中的数据,和下游B 表是一致的。 ddl 如果不是对A 表进行的操作,也会有影响吗?
来了老弟
4
看下 ddl 原理,ddl 的 owner 是在整个 tidb-server 中选举出来的。如果不是对 A 进行操作,对于 A 的数据是没有影响的,该 ddl 如果在非 LB tidb-server owner 上被执行可能不会被同步到下游,看下当前 binlog 延迟情况如何呢?
明天你好lk
(明天你好lk)
7
不是延迟,就是少了。后面的数据已经有了,但是这个对应的数据,kafka 里消费出来没有。
是有两个drainer ,一个输出到 Kafka,一个直接写到下游,然后从 Kafka 里消费的数据和下游的数据是一致的,但是上游和下游数据库的数据是不一致的,所以怀疑是有 binlog 丢失了,是这样的吗?
明天你好lk
(明天你好lk)
9
上游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 之后没有发现有问题,但是对其中的原理不太了解,担心有问题。
之前的数据不一致的具体的判断方法是什么样的?能否复现
明天你好lk
(明天你好lk)
11
根据主键 id 查询上游A 表,和下游数据对比发现不一致。问题也没有复现:测试业务场景sql、排除是否有错误连接到没有开启的 binlog TiDB server、并发场景测试,都没有复现。 会出现丢失的只有在连接到没有开启 binlog 的TiDB server 的情况下,但是已经排除了这种可能。暂时也没有发现其他的问题。
1.最好能保证所有 tidb 都开启 binlog,否则很容易出现问题。
2.按照你说的不执行 DDL、只在开启 binlog 的 tidb 上写数据的情况,确实不应该会丢失数据,现在也没什么可疑的点,如果复现后保留现场我们再查吧
system
(system)
关闭
15
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。