DM 迁移mysql数据到tidb 时 execute statement failed: DELETE FROM XXX; "RawCause": "Error 1105 (HY000): runtime error: index out of range [1] with length 1"

【 TiDB 使用环境】生产环境
【 TiDB 版本】V7.6
【复现路径】通过DM迁移mysql数据到TIDB,
【遇到的问题:】 在同步数据时 , 出现execute statement failed: DELETE FROM XXX; Error 1105 (HY000): runtime error: index out of range [1] with length 1
【错误信息:】
“errors”: [
{
“ErrCode”: 10006,
“ErrClass”: “database”,
“ErrScope”: “not-set”,
“ErrLevel”: “high”,
“Message”: “startLocation: [position: (mysql57-bin.000137, 787396581), gtid-set: 00000000-0000-0000-0000-000000000000:0], endLocation: [position: (mysql57-bin.000137, 788322038), gtid-set: 00000000-0000-0000-0000-000000000000:0]: execute statement failed: DELETE FROM shenbt.t_ab_bsd WHERE id = ? AND user_id = ? LIMIT 1”,
“RawCause”: “Error 1105 (HY000): runtime error: index out of range [1] with length 1”,
“Workaround”: “”
}

应该是遇到 bug 了。拿下 explain player,去反馈区吧。

把复现的路径贴一下~

看看是不是已知的问题。

小白一枚,怎么拿explain player

小白一枚 , 复现的路径是什么 ?

https://docs.pingcap.com/zh/tidb/v7.6/sql-plan-replayer#使用-plan-replayer-保存和恢复集群现场信息

1 个赞

生产环境,为何会用7.6版本?DMR版本


这个文件在什么位置?

同时 ,这个问题都发生在分区表上
以下为mysql语法
– zh_shenbao.t_sb_bsdt_zdylj definition

CREATE TABLE t_sb_bsdt_zdylj (
id varchar(60) NOT NULL
user_id varchar(60) NOT NULL COMMENT ‘用户id’,
bsdt_id varchar(60) NOT NULL COMMENT ‘地图菜单id’,
parent_id varchar(60) DEFAULT NULL COMMENT ‘父级菜单id’,
level int(2) NOT NULL COMMENT ‘菜单层级’,
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘更新时间’,
del_flag varchar(10) NOT NULL DEFAULT ‘enable’ COMMENT ‘是否删除 enable-未删除;disable-删除’,
PRIMARY KEY (id,user_id) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT=‘申报-地图自定义链接’
/*!50100 PARTITION BY KEY (user_id)
(PARTITION p0 ENGINE = InnoDB,
PARTITION p1 ENGINE = InnoDB,
PARTITION p2 ENGINE = InnoDB,
PARTITION p3 ENGINE = InnoDB,
PARTITION p4 ENGINE = InnoDB,
PARTITION p5 ENGINE = InnoDB,
PARTITION p6 ENGINE = InnoDB) */;
以下为tidb自动创建语法

CREATE TABLE t_sb_bsdt_zdylj (
id varchar(60) NOT NULL COMMENT ‘地图菜单自定义链接id’,
user_id varchar(60) NOT NULL COMMENT ‘用户id’,
bsdt_id varchar(60) NOT NULL COMMENT ‘地图菜单id’,
parent_id varchar(60) DEFAULT NULL COMMENT ‘父级菜单id’,
level int(2) NOT NULL COMMENT ‘菜单层级’,
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘更新时间’,
del_flag varchar(10) NOT NULL DEFAULT ‘enable’ COMMENT ‘是否删除 enable-未删除;disable-删除’,
PRIMARY KEY (id,user_id) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT=‘申报-地图自定义链接’
PARTITION BY KEY (user_id) PARTITIONS 7;

PARTITION p6 ENGINE = InnoDB) */;

replayer_Pxg3FA88gsyFCu9MA_KyAw==_1708922117779329525.zip|attachment (134.0 KB)
这个是导出的文件

上游 是 mysql5.7.25
具体迁移任务如下:
name: “sb”
task-mode: “all”
target-database:
host: “192.168.55.23” # 例如:172.16.10.83
port: 4000
user: “migrate_data”
password: “xxxxxxxxxxxxxxxxxxx”
mysql-instances:

  • source-id: “mysql50132”
    block-allow-list: “ba-rule1”
    block-allow-list:
    ba-rule1:
    do-dbs: [“sb_geshui”,“zh_shenbao”]

我帮你把密码编辑掉了。上网要注意安全。

跟这个 issue https://github.com/pingcap/tidb/issues/50206 是同一个问题。 当 key partition 的 column 不在第一列的时候,查询会报错。 目前 master 上已经修复了。可以将 user_id 列放在创建表的第一列绕过

1 个赞

应该 7.5.1 上已经修复了这个问题

去哪里找V7.5.1的安装包?

image

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