TiDB升级失败,如何恢复旧版本服务,恢复数据

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
当前版本:v3.0.10
升级版本:v4.0.9

【问题描述】
tidb升级过程中失败了,导致tidb服务故障。

如何快速恢复旧版本服务,恢复数据?

是否可以使用升级前备份的tidb-ansible恢复?


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

如果已经将环境导入到 tiup,和 ansible 就没关系了。

建议直接处理当前问题,tidb 各组件本身并不支持版本回退。所以在升级之前需要进行完整的测试。

本次升级未使用 tiup,还是使用的 ansible 升级方式;
tiup 升级是原子操作吗?
担心处理当前问题耗时过长,影响现网服务,所以就想一旦出问题,立马恢复旧版本使用。
完整的测试是指?有相关文档可以看下不
目前已经在测试环境升级完成,但是现网升级还需做好方案。

了解

仅用 tidb-ansible 升级操作是幂等的,直接 start 就可以恢复之前的服务,如果升级又问题的话。

官方推荐 v3 升级 v4 就是 import tiup,自行找下官方文档即可,「完整测试」指的是在测试环境真实操作一边升级。

好的感谢,也就是说:
tidb-ansible 升级方式,如果中途失败,直接把tidb-ansible文件rename回来,然后 ansible-playbook start.yml 就可以恢复之前的服务了是吧。
tiup 也可以这样中途失败,然后恢复吗?我看tiup的文档说如果失败,会立即停止当前步骤组件服务。
因为测试环境是用的ansible方式升级成功了,所以正式环境还是继续使用ansible吧,升级完成后安排上tiup。

不对,tidb-ansible 升级失败指的是执行 ansible-playbook rolling_update.yml 的时候失败是吗?

如果是这样貌似不能通过之前低版本的 tidb-ansible 文件管理集群了,因为节点的 bin 文件已经变更为高版本的了。

需要做的就是处理问题了,貌似没别的办法,咱们还是大版本升级,回退的可能性不大,

所以需要我们要有运维窗口,或者使用 dumpling+tidb-binlog 同步一个新的集群出来,直接切换业务来做。

1 个赞

是的,前面步骤没有失败的地方吧,就是mv tidb-ansible,git clone,修改配置文件,然后 ansible-playbook local_prepare.yml ,再 ansible-playbook rolling_update.yml

看下更新的回复~

好吧,那看来只能做最坏的打算了。
之前是有备用集群的,但是由于很多库表都没有唯一键,导致binlog同步延迟逐渐增大到无法容忍的地步,就放弃了。之前还想升级到4.0使用TiCDC的,看来没备份,这第一步升级都不太好走。。。

测试环境升级了4.0,dashboard 感觉不错,定位问题方便了很多。

目前不清楚不添加唯一键或者主键的原因,但是 tidb 环境建议还是都设置下,这个改动貌似对业务影响并不大,添加一个没有业务依赖的 id bigint auto_random 属性的。