DM任务Sync阶段分区表DDL的DROP PARTITION异常

【 TiDB 使用环境】测试
【 TiDB 版本】 V8.1.0
【复现路径】
0.tidb集群各节点状态正常,且分区相关参数使用的为默认参数,未做调整

  1. 在mysql8.0.23版本作为源端,新建测试库后新增一个LIST分区表
  2. 使用dm进行迁移任务创建并运行(全量+增量)
  3. 在mysql源端操作分区删除: ALTER TABLE topic_stats DROP PARTITION p20240616;
    【遇到的问题:问题现象及影响】
    dm的任务sync阶段出现异常,具体信息如下:
    (使用了binlog-schema获取结构信息且同时对比了mysql与tidb,三方分区表结构均一致)

{
“result”: true,
“msg”: “”,
“sources”: [
{
“result”: true,
“msg”: “”,
“sourceStatus”: {
“source”: “172.16.73.121_3306”,
“worker”: “dm-172.16.73.129-8262”,
“result”: null,
“relayStatus”: null
},
“subTaskStatus”: [
{
“name”: “dba”,
“stage”: “Paused”,
“unit”: “Sync”,
“result”: {
“isCanceled”: false,
“errors”: [
{
“ErrCode”: 44006,
“ErrClass”: “schema-tracker”,
“ErrScope”: “internal”,
“ErrLevel”: “high”,
“Message”: “startLocation: [position: (mysql-bin.000045, 66147), gtid-set: 346d370c-fe81-11ec-9fbc-00155dc00e11:1-176945,3c6c4d95-c173-11ed-a641-00155d247741:1-6], endLocation: [position: (mysql-bin.000045, 66295), gtid-set: 346d370c-fe81-11ec-9fbc-00155dc00e11:1-176946,3c6c4d95-c173-11ed-a641-00155d247741:1-6], origin SQL: [ALTER TABLE topic_stats DROP PARTITION p20240616]: cannot track DDL: ALTER TABLE dba_part.topic_stats DROP PARTITION p20240616”,
“RawCause”: “[ddl:1505]Partition management on a not partitioned table is not possible”,
“Workaround”: “You can use handle-error to replace or skip this DDL.”
}
],
“detail”: null
},
“unresolvedDDLLockID”: “”,
“sync”: {
“totalEvents”: “15”,
“totalTps”: “0”,
“recentTps”: “0”,
“masterBinlog”: “(mysql-bin.000045, 66648)”,
“masterBinlogGtid”: “346d370c-fe81-11ec-9fbc-00155dc00e11:1-176947,3c6c4d95-c173-11ed-a641-00155d247741:1-6”,
“syncerBinlog”: “(mysql-bin.000045, 66070)”,
“syncerBinlogGtid”: “346d370c-fe81-11ec-9fbc-00155dc00e11:1-176945,3c6c4d95-c173-11ed-a641-00155d247741:1-6”,
“blockingDDLs”: [
],
“unresolvedGroups”: [
{
“target”: “dba_part.topic_stats”,
“DDLs”: [
“ALTER TABLE dba_part.topic_stats DROP PARTITION p20240616
],
“firstLocation”: “position: (mysql-bin.000045, 66147), gtid-set: 346d370c-fe81-11ec-9fbc-00155dc00e11:1-176945,3c6c4d95-c173-11ed-a641-00155d247741:1-6”,
“synced”: [
dba_part.topic_stats
],
“unsynced”: [
]
}
],
“synced”: false,
“binlogType”: “remote”,
“secondsBehindMaster”: “0”,
“blockDDLOwner”: “”,
“conflictMsg”: “”,
“totalRows”: “15”,
“totalRps”: “0”,
“recentRps”: “0”
},
“validation”: null
}
]
}
]
}
烦请各位大佬帮忙看下,多谢多谢

错误 ddl:1505 表示在对一个非分区表执行分区管理操作,这在 MySQL 中是不可能的。这个错误表明 DM 在尝试应用一个 DROP PARTITION 的操作到一个它认为是非分区表的 TiDB 目标上。先看下 TiDB 目标表 topic_stats 是否确实是一个分区表。可以使用 SHOW CREATE TABLE topic_stats; 来确认。

你在下游直接执行 ALTER TABLE dba_part .topic_stats DROP PARTITION p20240616试试

在tidb作为下游,直接执行是正常的,且是正常的分区表
或者使用手工执行+skip方式可以继续运行
但是这个情况比较奇怪,应该是哪里没对

是正常的分区表
所以这个错误就很奇怪,如果到达了执行这一层应该不会报这样的错误

我没有复现啊,我特意安装了8.1.0的dm然后部署了一个任务执行如下sql:


下游正常变更了。。。

奇怪~~
你方便测试一下list的分区不,我这边验证一下range的分区是否正常

嗯,能够复现了,

1 个赞

重点是 我这边测试了range分区也复现了,很神奇啊

我这里range分区没问题,list分区不行,我提了个bug反馈,看下吧,现在不行先跳过吧。。。

1 个赞