ticdc同步任务报错

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】v7.5.3
使用ticdc进行tidb到tidb的同步,时不时出现错误:

'time': '2024-09-20T13:09:17.4936967Z', 
 'code': 'CDC:ErrReachMaxTry', 
'message': '[CDC:ErrReachMaxTry]reach maximum try: 8, 
error: Failed query info: COMMIT; : [CDC:ErrMySQLTxnError]MySQL txn error: Error 8141 (HY000): assertion failed: key: 748000000000148fb25f698000000000000002016466663366376239ff2d386665632d3463ff37352d386463312dff3331386662666562ff6332613500000000fb016362663964383130ff2d353063392d3433ff30662d383430322dff6235396562353932ff3361653600000000fb016466663366376239ff2d386665632d3463ff37352d386463312dff3331386662666562ff6332613500000000fb, assertion: Exist, start_ts: 452680157066166295, existing start ts: 0, existing commit ts: 0: Failed query info: COMMIT; : [CDC:ErrMySQLTxnError]MySQL txn error: Error 8141 (HY000): assertion failed: key: 748000000000148fb25f698000000000000002016466663366376239ff2d386665632d3463ff37352d386463312dff3331386662666562ff6332613500000000fb016362663964383130ff2d353063392d3433ff30662d383430322dff6235396562353932ff3361653600000000fb016466663366376239ff2d386665632d3463ff37352d386463312dff3331386662666562ff6332613500000000fb, assertion: Exist, start_ts: 452680157066166295, existing start ts: 0, existing commit ts: 0'}

错误码 CDC:ErrMySQLTxnError 表示在执行 MySQL 事务时出现了问题,具体是 Error 8141 (HY000): assertion failed ,这通常意味着在执行事务时,TiCDC 期望某个 key 存在,但实际上在下游数据库中该 key 不存在

1 个赞

1.数据不一致: 上游和下游集群之间的数据可能存在不一致,导致TiCDC在尝试同步某些数据时遇到问题;
2.并发事务冲突: 如果下游TiDB集群上有其他写入操作,可能会与TiCDC的同步操作产生冲突;
3.TiKV或PD问题: TiKV存储层或PD调度层的问题可能导致数据读写异常,进而影响TiCDC的同步;
4.网络问题: 上下游集群之间的网络不稳定可能导致同步操作失败并重试。

请参考 CDC:ErrMySQLTxnError]MySQL txn error: Error 8141 - #2,来自 asddongmen 解决

在 TiDB 中执行某个操作时,期望某个键存在,但实际上并不存在。

1 个赞

参考 https://docs.pingcap.com/zh/tidb/stable/troubleshoot-data-inconsistency-errors#error-8141
根本原因是上下游的数据不一致的问题,因此应该在重启changefeed重试后无法解决,则需要关注纠正数据不一致问题了。

  1. 检查数据一致性
  • 确保源 TiDB 和目标 TiDB 的 schema 完全一致,特别是涉及的表和索引。
  • 使用 CHECK TABLE 等工具检查表的一致性。
  1. 调整 TiCDC 配置
  • 检查 TiCDC 的配置,特别是与重试和超时相关的参数,例如 max-retry-countmax-commit-duration
  • 可以考虑增加重试次数,但需要确保不会掩盖根本问题。
  1. 监控和日志
  • 增加 TiCDC 的日志级别,查看更详细的错误信息,可能会找到更具体的原因。
  • 监控 TiDB 集群的性能,确保没有出现性能瓶颈。