drainer.log一直报死锁错误

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

  • 【TiDB 版本】:3.0.9
  • 【问题描述】:tidb使用drainer同步下游mysql时drainer.log一直报死锁错误,同步延迟在5-10分钟。 报错如下 error="Error 1213: Deadlock found when trying to get lock; try restarting transaction

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

  1. TiDB Server 中有没有报错 ? 检查一下是否有 deadlock 的报错。
  2. 根据报错确认具体报错的事务逻辑,是否会有死锁逻辑上游没有解决。
  3. drainer 的关键报错的上下文报错可以发出来。

您好,我也遇到了这个问题。

V4.0.0

tidb.log没有死锁的日志。但drainer.log一直提示:
error="Error 1213: Deadlock found when trying to get lock; try restarting transaction

另外,
1、drainer的配置文件中
disable-dispatch = false. 是否会对sql的执行顺序有影响?
2、在启动drainer之前,有过强制终止一个pump的进程,是否会导致binlog的写入错乱,从而导致drainer在读取执行binlog时死锁?

谢谢。

这个应该不影响上下游数据同步,可以通过 sync-diff- inspector 工具确认一下数据是否一致。

-disable-dispatch
    是否禁用拆分单个 binlog 的 sqls 的功能,如果设置为 true,则按照每个 binlog
    顺序依次还原成单个事务进行同步( 下游服务类型为 mysql, 该项设置为 False )

如果其中一个 pump 强制终止了,可能会导致 drainer 无法同步,等待 pump 恢复了才会修复。