ddl job 卡住 cancel job 报错

【 TiDB 使用环境】
测试
【 TiDB 版本】
5.7.25-TiDB-v6.1.7
【遇到的问题:问题现象及影响】
源端MySQL通过DM同步到tidb,在源端MySQL执行了alter table xx alter index xx invisible
目标端此操作一直未完成,通过ADMIN SHOW DDL JOBS查看,发现有大量的此dll job,其中一个job处于running状态,运行时长已超过6天。
使用admin cancel ddl jobs 34965取消正在运行的job时报错
ERROR 9007 (HY000): Write conflict, txnStartTS=452107820148981762, conflictStartTS=452107821249724418, conflictCommitTS=452107821249724419, key=byte{0x6d, 0x44, 0x44, 0x4c, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0xff, 0x73, 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1} primary=byte{0x6d, 0x44, 0x44, 0x4c, 0x4a, 0x6f, 0x62, 0x4c, 0x69, 0xff, 0x73, 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6c, 0x80, 0x0, 0x0, 0x0, 0x0,

此job导致后续ddl操作全被阻塞
tidb日志
[2024/08/26 15:34:20.737 +08:00] [INFO] [ddl_worker.go:819] [“[ddl] run DDL job”] [worker=“worker 1, tp general”] [job=“ID:34965, Type:alter index visibility, State:running, SchemaState:none, SchemaID:32812, TableID:32912, RowCount:0, ArgLen:0, start time: 2024-08-20 17:12:07.659 +0800 CST, Err:, ErrCount:0, SnapshotVersion:0”]

重新选举过ddl owner也没有作用

【资源配置】
3个pd
3个tidb节点
3个tikv
1个tiflash
【附件:截图/日志/监控】
job队列

cancel job

tidb日志

重启大法试过吗?

invisible index记得是mysql-8.0的新特性啊!确定5.7可以用?你是不是记错呢?

重启过集群,也重启过tidb节点,都没用

源端mysql确实是8.0的

alter table xx alter index xx invisible,下游直接执行这个sql会报错吗?

现在没法执行了,ddl都被阻塞了,6.1版本的ddl好像是串行的

语法没问题,不报错

抽空restart -R tidb试一下吧,别一个一个重启了。。。

这个也试过了,也没用

看下有没有元数据锁,但按理所有节点都重启的话,应该没锁了。。。SELECT * FROM mysql.tidb_mdl_view;

试试关掉 Metadata Lock 呢。

咋关呀?

这个版本好像没有这个视图

你这个版本还没有元数据锁, tidb_enable_metadata_lock这个参数可以关,但是你没有也没必要关了。。。

好吧,没注意版本 :thinking:

我之前升级集群过程时,没注意有ddl。也遇到过无论执行什么ddl,都阻塞。你有升级过tidb集群吗?

试过这个方法吗?可行吗?

直接将那条SQL到目标端执行会卡住吗?

没有升级过集群