You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TiDB DM从MySQL迁移ENUM列数据时报1105错误如何排查?

排查思路

1. 校验表结构一致性

  • 分别查询源端MySQL、目标端TiDB的对应表结构,确认ENUM字段的枚举值数量、顺序完全一致:
    源端查询:SHOW CREATE TABLE xxx.api_logs;
    目标端查询:SHOW CREATE TABLE ti_xxx.api_logs;
  • 执行 dmctl query-status <你的任务名>,检查DM内部schema tracker加载的表结构元信息,确认DM识别的ENUM字段定义和实际上下游一致,排除全量同步后表结构被修改但DM未更新的问题
  • 重点确认目标端ENUM定义确实包含两个枚举值,没有出现枚举值缺失、顺序颠倒的情况

2. 排查DM版本已知bug

你使用的DM v2.0.6属于较老版本,存在已知的ROW格式binlog ENUM索引值解析异常问题:该版本会错误将ENUM的1起始索引按照0起始计算,导致合法的索引值2被识别为超出枚举范围,触发1105报错。

  • 临时验证方法:在测试环境搭建同版本DM集群,构造含相同ENUM定义的表,执行更新ENUM为索引值2的操作,观察是否触发相同报错

3. 校验SQL_MODE配置

  • 分别确认源端MySQL、目标端TiDB、DM组件的SQL_MODE配置,排查是否开启了过于严格的ENUM校验规则,例如STRICT_TRANS_TABLES等参数
  • DM侧SQL_MODE可以在任务配置文件、DM-worker启动配置、query-status返回结果中查看

4. 临时恢复及修复方案

  • 若需要快速恢复同步,可以先执行 dmctl handle-error <任务名> skip <binlog位置> 跳过当前报错语句,再手动将对应更新操作以枚举字符串赋值的方式写入目标端
  • 长期修复建议将DM升级到v2.0.7及以上稳定版本,该版本已经修复了ENUM索引值解析的相关问题

内容的提问来源于stack exchange,提问作者Quyen Le

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:09:03