【 TiDB 使用环境】测试环境
【 TiDB 版本】 v5.4.3
【复现路径】
使用tiup upgrade集群升级,v3.0.19 → 4.0.16 → v5.4.3 均正常,v5.4.3 → v6.5.0到重启tidb过程时失败,查看日志发现ddl队列卡住,反复打如下日志:
[2023/02/04 19:25:34.130 +08:00] [INFO] [ddl_worker.go:932] [“[ddl] wait latest schema version changed”] [worker=“worker 1, tp general”] [ver=37633] [“take time”=54.954686ms] [job=“ID:32748, Type:modify column, State:done, SchemaState:public, SchemaID:3, TableID:19, RowCount:0, ArgLen:0, start time: 2023-02-03 19:04:57.588 +0800 CST, Err:, ErrCount:0, SnapshotVersion:0”]
[2023/02/04 19:25:34.130 +08:00] [INFO] [ddl_worker.go:906] [“[ddl] schema version doesn’t change”] [worker=“worker 1, tp general”]
[2023/02/04 19:25:34.136 +08:00] [ERROR] [delete_range.go:101] [“[ddl] add job into delete-range table failed”] [jobID=32748] [jobType=“modify column”] [error=“json: cannot unmarshal object into Go value of type []int64”]
[2023/02/04 19:25:34.136 +08:00] [WARN] [ddl_worker.go:201] [“[ddl] handle DDL job failed”] [worker=“worker 1, tp general”] [error=“json: cannot unmarshal object into Go value of type []int64”]
不行就取消掉
参考这个命令
https://docs.pingcap.com/zh/tidb/stable/sql-statement-admin-cancel-ddl#admin-cancel-ddl
一般要求升级途中是不能有正在执行的ddl操作的。。。
确实可能是升级过程中DDL了,这些情况有补救办法吗
测试环境,就自己备份数据,拆了重建算了…
其实还是想在这个集群上把这个问题解决掉。通过这次升级,说明有时候可能无法完全避免升级的时候无DDL,比如业务自己可能已经不记得某个任务会什么时候自动进行DDL
升级前可以admin show ddl,查询是否有在执行的SQL,create table 应该很快执行完毕的,我遇到长时间的SQL只有加索引的情况