TiDB 升级高版本时 “mysql.tidb_runaway_watch” 不存在问题解决攻略
作者: asd80703406 原文来源:https://tidb.net/blog/90394c97
背景
近期发现很多人从低版本升级至 TiDB v7 或者 v8 版本,均遇到了 tidb-server 启动失败,提示报错如下:
[“get runaway watch record failed”] [error=”[schema:1146]Table ‘mysql.tidb_runaway_watch’ doesn’t exist”]
[“try to get new runaway watch”] [error=”[schema:1146]Table ‘mysql.tidb_runaway_watch’ doesn’t exist”]
社区解决方案
社区很多人的处理方式归类为以下几种方式:
方法 1、多次启停 tidb-server 进程,自动就成功了。 这个也是我自己偶然间重试后,发现的一个方法,确实可以,但是需要多次 stop tidb-4000 ; start tidb-4000;
方法 2、提前创建升级需要的表,比如 mysql.tidb_runaway_watch ,参考链接:https://asktug.com/t/topic/1018496/7 ,参考代码 bootstrap.go 。 亲测,依然无法一次成功。
本人亲测升级方案
接下来分享我多次重试后的升级方案
本人环境:TiDB v5.3.4 升级至 v7.5.1, 3PD + 3 TIKV + 3 tidb
升级步骤
1、停止集群
2、升级 tiup 组件
3、升级 cluster 组件
4、升级集群(我这里是离线升级法)
核心升级步骤(分组件启动)
要想升级不报错,启动升级后集群需要分组件启动
5、启动集群 PD 节点
6、启动集群 TIKV 节点
7、启动节点某一台 tidb-server 进程 (重点来了)
只启动一台 tidb-server,这样升级涉及的 bootstrap.go 等相关代码,就只会有一台 tidb-server 执行。亲测不会有报错的情况。
8、启动其他服务
官网标准步骤升级失败的原因猜测
1、低版本升级至高版本,多个 tidb-server 进程存在 mdl 锁争用,也存在锁冲突的情况
2、官方 BUG,没有深挖
升级需要注意事项
1、版本间 cluster yaml 文件可能存在配置不兼容的情况,升级前需要提前确认配置文件兼容性
2、硬件不兼容。 比如 高版本 tiflash 组件需要 CPU 支持 avx2 指令集,升级前需确认,确认命令:lscpu | grep avx2
3、其他原因请参考官网手册
吐槽一下:
专栏审核好复杂。好几天没有审核通过,感觉是有 BUG。第一次提交很快审核通过,后边就 delay 了好几。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/84d16e8edbfaa729f10eaeaf8】。文章转载请联系作者。
评论