关于使用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 个赞

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