DM 任务老报主键重复的错

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

  • 【TiDB 版本】:3.0.9
  • 【问题描述】:DM任务load阶段,到90%之后老是报主键重复。
    感觉是任务重复执行了
    1.dm-work 日志

2.task配置文件

name: slave # global unique
task-mode: all # full/incremental/all

target-database:
host: “172.28.12.77”
port: 4000
user: “root”
password: “”

mysql-instances: # one or more source database, config more source database for sharding merge

source-id: "my-replica-01" # unique in all instances, used as id when save checkpoints, configs, etc.
black-white-list:  "instance"
# number of threads to use for dump data
mydumper-thread: 4
# number of threads to use for load data
loader-thread: 16
# number of threads to use for replicate binlog
syncer-thread: 16

black-white-list:
instance:
#do-dbs: [“~^db_*”]
ignore-dbs: [“mysql”,“data”,“information_schema”,“performance_schema”,“sysdb”]
ignore-tables:
#run
- db-name: “run”
tbl-name: “ctachment”

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

1、请提供下 DM 的小版本号,在 v1.0.5 版本,对全量导入的主键冲突做了相关的优化:

https://docs.pingcap.com/zh/tidb-data-migration/v1.0/1.0.5

2、主键冲突的问题,请确认,除 DM 外,是否还有其他的业务行为对该表进行操作。

DM 1.0.4
之前我翻到有个帖子不是说1.0.4修复了吗

根据发版记录是在 v1.0.5 正式发版的哈,详情如下:

那我只能重新导数据了吗
几百G

原则上 DM 支持断点续传,但是由于全量导入阶段,报错频繁,这边还是建议升级后,重新全量导入,然后再继续进行后续的操作。

有没有哪个工具会导入导出快一点的
谢谢

1、从 MySQL 导出数据到 TiDB 还是推荐使用 Mydumper。

2、导入数据到 TiDB ,建议使用 Loader 以及 TiDB-Lightning,如果是使用 TiDB-Lightning ,那么若使用 importer 模式,TiDB 无法对外提供服务,请关注。

https://docs.pingcap.com/zh/tidb/v4.0/loader-overview#loader-使用文档

https://docs.pingcap.com/zh/tidb/v4.0/get-started-with-tidb-lightning/#tidb-lightning-教程

3、如果是 Mydumper 导出,再使用 TiDB-Lightning 导入全量数据(importer 模式,TiDB 无法对外提供服务),然后再进行 DM 增量同步,那么需要手动的设置 DM 增量同步的位点,参照如下文档:

https://docs.pingcap.com/zh/tidb-data-migration/v1.0/task-configuration-file-full

这个是什么问题吗?

tsk配置

请检查是否存在此文件,上游mysql是否有此binlog文件,是否DM还没有拉取,就已经被清理了?

DM会自动拉取上游mysql所有binlog日志吗

视情况而定,当前问题为 relay log 丢失,建议重做下同步,防止数据不一致

请教下,image
这个差距越来越大,是要配置什么吗

上面的这个binlog文件如果mysql不存在了,DM拉取不到,无法同步,后面的binlog文件就都无法同步,建议重新全量同步后,再增量同步。

binlog文件我手动下载放进去了,然后启动DM任务
看监控现在这个syncer跟master差距越来越大了

  1. 请问是放到哪里了? 放到之前mysql的binlog目录下吗?
  2. 麻烦再反馈下query-status结果,多谢。

放到dm-work得relay-log下面

binlog文件 DM 会自动解析,所以麻烦放到mysql的目录试试,看DM是否会自动拉取,多谢。

上游mysql是云上的数据库,binlog文件我是下载下来的
DM拉取的日志好像都是从启动dm开始时间拉取的

  1. 保证上游mysql的binlog目录有此binlog文件
  2. relay log 里不要把mysql的binlog放进去,如果有移出去,之后重启dm进程看看能否拉取,多谢。