DM工具mysql 同步到tidb不支持DDL

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】
mysql5.6->tidb7.5.1总是不支持对分区的truncate操作
“subTaskStatus”: [

            {

                "name": "xxxxxx_01",

                "stage": "Paused",

                "unit": "Sync",

                "result": {

                    "isCanceled": false,

                    "errors": [

                        {

                            "ErrCode": 44006,

                            "ErrClass": "schema-tracker",

                            "ErrScope": "internal",

                            "ErrLevel": "high",

                            "Message": "startLocation: [position: (binlog.001620, 822771972), gtid-set: 7d0295a0-2bbe-11ea-8570-6c92bf2cdb99:1-57123185], endLocation: [position: (binlog.001620, 822772118), gtid-set: 7d0295a0-2bbe-11ea-8570-6c92bf2cdb99:1-57123186], origin SQL: [ALTER TABLE report_xxxxxxx TRUNCATE PARTITION p174]: cannot track DDL: ALTER TABLE db.`report_xxxxxx` TRUNCATE PARTITION p174",

                            "RawCause": "[ddl:1505]Partition management on a not partitioned table is not possible",

                            "Workaround": ""

但是我看mysql和tidb都有这个分区,还是说不支持对分区的truncate操作

tidb上

  PRIMARY KEY (`ID`,`date`) /*T![clustered_index] CLUSTERED */,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
PARTITION BY LIST (DAYOFYEAR(`date`))
(PARTITION `p1` VALUES IN (1),
 PARTITION `p2` VALUES IN (2),
 PARTITION `p3` VALUES IN (3),
 PARTITION `p4` VALUES IN (4),
PARTITION `p171` VALUES IN (171),
 PARTITION `p172` VALUES IN (172),
 PARTITION `p173` VALUES IN (173),
 PARTITION `p174` VALUES IN (174),
 PARTITION `p175` VALUES IN (175),
 PARTITION `p176` VALUES IN (176),
 PARTITION `p177` VALUES IN (177),

mysql上

  PRIMARY KEY (`ID`,`date`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
/*!50100 PARTITION BY LIST (DAYOFYEAR(date))
 PARTITION p172 VALUES IN (172) ENGINE = InnoDB,
 PARTITION p173 VALUES IN (173) ENGINE = InnoDB,
 PARTITION p174 VALUES IN (174) ENGINE = InnoDB,
 PARTITION p175 VALUES IN (175) ENGINE = InnoDB,
 PARTITION p176 VALUES IN (176) ENGINE = InnoDB,
 PARTITION p177 VALUES IN (177) ENGINE = InnoDB,

看这块的报错提示不是分区表哦

1 个赞

简单的验证办法,你在下游手工执行下这个sql看看

1 个赞

未分区表上的分区管理是不可能的
根据这个提示,TiDB上没有分区或不是分区表

报错提示不是分区表

我这边是除了建表。。加索引,删索引,truncate ,drop,全部过滤。手动在tidb操作

是不是理解上有偏差, DM 的支持和适应的场景也是有限的,并不是完全兼容的。
有 DDL 的问题,要手动处理的

可以看看官方文档,创建分区表的部分。

ALTER TABLE xxxxxx.xxxxxxxx` TRUNCATE PARTITION p174;
Query OK, 0 rows affected (1.21 sec)

在下游tidb执行是没问题的,怀疑这是tidb的一个bug

1 个赞

是分区的,看上面的表结构

是已知的bug:https://github.com/pingcap/tiflow/issues/11408

分区表是不支持

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。