关于使用drainer同步数据,出现“skip old version truncate dml”日志,是否会丢弃旧的数据?

【 TiDB 使用环境】生产\测试环境\ POC

【 TiDB 版本】

TiDB版本为:v4.0.9

【遇到的问题】

使用binlog做上下游TiDB的同步,TSO已经追平,比对上下游的数据不一致,是否因为以下的日志信息?

[2022/04/20 11:39:46.746 +08:00] [INFO] [syncer.go:581] [“skip old version truncate dml”] [“table id”=5060]

[2022/04/20 11:38:46.272 +08:00] [INFO] [syncer.go:581] [“skip old version truncate dml”] [“table id”=5060]

SELECT COUNT(*) FROM semantic_code_v3 --105316 上游的count数量

SELECT COUNT(*) FROM semantic_code_v3 --82843 下游的count数量

想知道[“skip old version truncate dml”]具体是怎么判断的?

【复现路径】做过哪些操作出现的问题

没有做过操作,一直保持同步

【问题现象及影响】

【附件】

  • 相关日志、配置文件、Grafana 监控(https://metricstool.pingcap.com/)

  • TiUP Cluster Display 信息

  • TiUP CLuster Edit config 信息

  • TiDB-Overview 监控

  • 对应模块的 Grafana 监控(如有 BR、TiDB-binlog、TiCDC 等)

  • 对应模块日志(包含问题前后 1 小时日志)

Drainer配置如下:

-----------------------------------Drainer日志开始-----------------------------------------------------------

# to get higher throughput by higher concurrent write to the downstream

drainer Configuration.

syncer Configuration.

[syncer]

sql-mode = “”

txn-batch = 200

worker-count = 64

safe-mode = true

db-type = “tidb”

sync-ddl = true

ignore-txn-commit-ts = []

ignore-schemas = “dm_meta,INFORMATION_SCHEMA,METRICS_SCHEMA,mysql,PERFORMANCE_SCHEMA,test,tidb_loader”

[syncer.to]

host = “192.168.11.111”

user = “root”

password = “123456”

port = 4000

-----------------------------------Drainer日志结束-----------------------------------------------------------


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

2赞


参考下

3赞

可能我没有描述清楚,是TiDB-binlog的监控面板的Checkpoint TSO 已经追平,然后发现上下游数据库的这个表有不一致的现象,所以想确认是不是因为”skip old version truncate dml“导致的

2赞

drainer没有用过,truncate 后,对应的table的table_id变了,对下游sync有影响。可能是这个原因。

2赞

找了开发确认了,并没有做truncate的操作的

2赞


参考下这个

2赞

参考一下这个 issue,理解为 info log 只是反馈触发处理 online ddl 操作,并不会影响同步数据一致性,可以看一下对应的 github issue 帮助你理解。https://github.com/pingcap/tidb/issues/9304

2赞

但是出现这个日志的表,(table id”=5060),确实没有数据同步,其他表是正常有数据同步

2赞

在"https://github.com/pingcap/tidb/issues/9304"里面有这么一段:
“After truncate table at downstream we may receive the old schema version DML(with old table id), we must discard this DML.”
请教一下,这里的"after truncate table at downstream",是指我们人工truncate还是同步过来的DDL进行的truncate?

1赞

是上游同步过来的 DDL 操作,info 日志对于数据同步没有影响。在 19 年时候做过修复,对于最新的版本使用没有影响。没如果没有特殊的需求,建议使用 TiCDC 可用性方面会更好点。

1赞

好的,非常感谢

1赞