【 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
小白一枚 , 复现的路径是什么 ?
生产环境,为何会用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) */;
上游 是 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
列放在创建表的第一列绕过
应该 7.5.1 上已经修复了这个问题
去哪里找V7.5.1的安装包?
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。