dm同步MySQL到tidb

【 TiDB 使用环境】 /测试
【 TiDB 版本】5.7.25-TiDB-v6.5.0
【复现路径】dm同步MySQL数据到tidb 全库 ,忽略几张表
【遇到的问题:同步报错】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】


求咨询 1.什么方式可以全部规避这个报错,让其他表顺利同步,
2.这个任务如果重新开始 ,如何修改配置文件可以达到,同步整个库,去除其中几张表的需求

报错可以文本贴一下

[tidb@tidb-server4 ~/dm_prod/tasks]$dmctl --master-addr 10.3.57.4:8266 query-status acornhc_healthdata_task1
{
“result”: true,
“msg”: “”,
“sources”: [
{
“result”: true,
“msg”: “”,
“sourceStatus”: {
“source”: “pingtaiku”,
“worker”: “dm-10.3.57.54-8268”,
“result”: null,
“relayStatus”: null
},
“subTaskStatus”: [
{
“name”: “acornhc_healthdata_task1”,
“stage”: “Paused”,
“unit”: “Load”,
“result”: {
“isCanceled”: false,
“errors”: [
{
“ErrCode”: 10006,
“ErrClass”: “database”,
“ErrScope”: “downstream”,
“ErrLevel”: “high”,
“Message”: “file acornhc_healthdata.phr_test_medical_records.0000002660003.sql: execute statement failed: commit”,
“RawCause”: “Error 1062: Duplicate entry ‘2c94864b8e9892a7018f035b89d94c95’ for key ‘phr_test_medical_records.idx_medical_id’”,
“Workaround”: “”
}
],
“detail”: null
},
“unresolvedDDLLockID”: “”,
“load”: {
“finishedBytes”: “144789461945”,
“totalBytes”: “589632102257”,
“progress”: “24.56 %”,
“metaBinlog”: “(mysql-bin.004614, 59544788)”,
“metaBinlogGTID”: “”
}
}
]
}
]
}

问题1 应该是个 bug 分区表主键插入重复 bug

可以更新到 6.5.10 的版本

这个问题是我tidb环境 这个库里已经有这个表了,这个任务本来是想忽略这个表,配置文件里 配置了 但是应该是没生效,我现在有点急想让这个任务先执行成功,想直接忽略这个报错,不知道如何操作

https://docs.pingcap.com/zh/tidb/v6.5/task-configuration-file-full,配置文件上这里是不没有写

应该不是吧 下面是我配置文件,麻烦帮我看看 哪里有问题

黑白名单配置

block-allow-list:
rule-1:
do-tables:
- db-name: “acornhc_healthdata”
tbl-name: “*”
ignore-tables:
- db-name: “acornhc_healthdata”
tbl-name: “member_user_proof”
- db-name: “acornhc_healthdata”
tbl-name: “member_user”
- db-name: “acornhc_healthdata”
tbl-name: “service_provider_proof”
- db-name: “acornhc_healthdata”
tbl-name: “phr_checkup_category”
- db-name: “acornhc_healthdata”
tbl-name: “phr_checkup_item_result”
- db-name: “acornhc_healthdata”
tbl-name: “phr_medical_service_advice_report”
- db-name: “acornhc_healthdata”
tbl-name: “phr_test_medical_records”
- db-name: “acornhc_healthdata”
tbl-name: “base_phr_dataelements_item”

Dump 单元配置

mydumpers:
global:
threads: 4
chunk-filesize: 64
extra-args: “–consistency none”

loaders:
global:
pool-size: 16
dir: “./dumped_data”

syncers:
global:
worker-count: 16
batch: 100
enable-ansi-quotes: true
safe-mode: true
compact: true
multiple-rows: true

mysql-instances:

  • source-id: “pingtaiku”
    block-allow-list: “rule-1”
    mydumper-config-name: “global”
    loader-config-name: “global”
    syncer-config-name: “global”



感觉白名单把黑名单覆盖了,白名单用正则方式写吧,别用*了

1 个赞

表稍微有点多,不太好挑

直接把已存在的表rename成其它表名可以吗

那你黑白名单分成两个rule试下,这个我没试过,不过不行也只能按照前缀正则了

这个不可以 那个也是正在同步的表,其他任务在做 那些表是mycat的表

好的我试一下 谢谢

我也遇到这个bug了。经常行的 提示主键冲突。但是你执行resume 就恢复了。我就写了一个shell 每分钟检查报错这一行有没有 这个par字段“|grep PRIMARY |wc -l)” 如果有。执行恢复命令。

好的 谢谢

给你参考使用,如果有更好的方案,可以互相讨论
–tiupquery.sh
~/.tiup/bin/tiup dmctl --master-addr=192.168.3.233:8261 query-status mysql-tidb
–auresum.sh
#!/bin/bash

自动监控DM同步出现主键冲突错误,并自动执行恢复命令

date=$(date “+%Y-%m-%d %H:%M:%S”)
monitor1=$(/server/tiupquery.sh 2>/dev/null |grep PRIMARY |wc -l)

if (( ${monitor1} >0 )); then
echo $monitor1,$date,‘订单库’
/server/tiupresume.sh
fi

– tiupresum.sh
~/.tiup/bin/tiup dmctl --master-addr=192.168.3.233:8261 resume-task mysql-tidb