DM在loader阶段报错

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

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

整个库的dump文件不到500MB

从错误信息来看是写下游失败,而且是报 duplicate entry 错误,请确认下游的表结构是不是有 unique key

这个是我重复执行导致的,稍等,我把任务清空,重新来一遍

报错信息:

[dm-worker.log.bak|attachment] woker节点的日志 (upload://tGnNkTOkmanGBvq49MZDdk5zkRU.bak) (1.9 MB)

dm-worker.log.bak (1.9 MB)

这次是 primary key 有重复

下游没有写入,只有从dm一个入口写入,为啥会primary key 有重复呢,如何解决这个问题

我已经尝试了不下5次了,依然这样

请确认:

  1. 重新导入时 DM 下游的 TiDB 是否存在之前导入的数据没有清理。
  2. remove-meta 是否有设置为 True
  3. dumper 阶段生成的备份文件是否存在重复的 Insert 数据。

1、

2、 3、dumper不会产生重复的insert吧,除非有bug

我刚才重新来了一次还是不行

可以在 dump 的文件中 grep 一下上面报错的主键 142,看是否存在于多个文件中。DM在同步中load状态下显示主键冲突,但是resume-task可直接恢复

主键是142的就一条数据

resume-task之后又有了其他冲突,但是原生dump数据就一条

可以在 dump 目录下统一搜索一下是否存在该值,是否有多个 sql 文件 ?

看上面描述新增同步任务,这边还有其他的同步任务在启动吗 ? 可以在下游查看一下该语句是否存在,另外 load 阶段遇到主键冲突,不建议执行 resume-task,问题并没有完全解决。下次读到该文件仍然有主键冲突的报错。

  • 可以通过 TiDB 的 API 看下这条记录的 MVCC 信息https://github.com/pingcap/tidb/blob/master/docs/tidb_http_api.md
  • 再结合 log 里导包含这条记录的 sql 文件名,看下时间点上

整个过程我又重新来了一遍还是这样 1、dump 目录只有这一个sql文件,并且这个文件里面的insert也没有主键冲突的记录

2、我上游mysql上一个实例下面有多个数据库,已经有其他task任何在同步其他库了,这个task只同步saos_aftersale这个库 3、下游已经insert过了这条sql 4、从woker的日志看,报错这个sql执行了两次loader,问题应该就出在这里了,为啥会执行两次呢

这个查过了吗 ?

这条sql重复loader,需要查为啥重新执行loader

MVCC是看那个信息呢