tidb数据库的恢复操作

背景

tidb数据库是多副本的一个集群数据库,类似ceph,三节点出现两节点的时候也是无法选举,以及内部数据的leader不同,会出现无法访问的情况,本篇就是基于这个来进行恢复的实践

  • 三节点坏两个,做恢复
  • 备份了一个节点数据,三个节点都坏了

这两个场景基本一致的

相关操作

清理集群

tiup cluster destroy tidb-test

关闭顺序 tidb tikv pd

初始化集群

tiup cluster deploy tidb-test v5.4.0 ./topology.yaml --user root

启动集群

tiup cluster start tidb-test

设置密码

mysql -u root -h 192.168.0.101 -P 4000 -p
SET PASSWORD FOR 'root'@'%' = '123456';

备份集群数据

/root/.tiup/storage/cluster/clusters/
/data/tidb-deploy/
/data/tidb-data/

第一个是集群的拓扑信息
第二个数数据库的部署和启动相关的
第三个是数据目录
这三个都建议备份下

模拟pd损坏

模拟pd三节点坏两个

tiup cluster display tidb-test

查看集群id

[root@lab101 data]# cat tidb-deploy/pd-2379/log/pd.log |grep "init cluster id"
[2025/04/09 10:16:00.265 +08:00] [INFO] [server.go:358] ["init cluster id"] [cluster-id=7491131464661495325]

查看pd的leader的id

[root@lab102 data]# cat tidb-deploy/pd-2379/log/pd.log |grep "idAllocator"
[2025/04/09 10:21:21.326 +08:00] [INFO] [id.go:122] ["idAllocator allocates a new id"] [alloc-id=2000]

这个id每切换一次,leader的id增加1000 注意后面设置的id比最新最大的id还大就行

全部停止

tiup cluster stop  tidb-test -N 192.168.0.102:2379,192.168.0.102:2379,192.168.0.101:2379

当前查询到的最大id为2000

假设坏了两个,这里把数据挪走

先缩减异常的节点

tiup cluster scale-in tidb-test -N 192.168.0.102:2379,192.168.0.103:2379 --force
方法一:纯新建pd

再删除当前正常的pd异常的目录

rm -rf /data/tidb-data/pd-2379

修改启动脚本,改3节点为单节点

/data/tidb-deploy/pd-2379/scripts/run_pd.sh

再启动

tiup cluster start tidb-test -N 192.168.0.101:2379

再修改id信息

tiup pd-recover -endpoints http://192.168.0.101:2379 -cluster-id 7491131464661495325 -alloc-id 6000
方法二: 基于老数据

这里有两种方法,上面的方法是需要日志查询id信息的,下面这种不用
使用老的数据目录
启动脚本/data/tidb-deploy/pd-2379/scripts/run_pd.sh增加,

--force-new-cluster

然后启动pd
然后恢复

[root@lab101 data]# tiup pd-recover   -from-old-member  -endpoints http://192.168.0.101:2379

提示restart

tiup cluster restart tidb-test -N 192.168.0.101:2379

tikv的恢复

先全部停止

tiup cluster stop  tidb-test -N 192.168.0.101:20160,192.168.0.102:20160,192.168.0.103:20160

强制缩容

tiup cluster scale-in tidb-test -N  192.168.0.102:20160,192.168.0.103:20160 --force

启动单个

tiup cluster start tidb-test -N 192.168.0.101:20160

暂停pd调度

tiup ctl:v5.4.0 pd -u "http://192.168.0.101:2379" -i

» config set region-schedule-limit 0
Success!
» config set replica-schedule-limit 0
Success!
» config set merge-schedule-limit 0
Success!
» config set hot-region-schedule-limit 0
Success!

查询store id

tiup ctl:v5.4.0 pd -u "http://192.168.0.101:2379"  store

id7 101
id1 103
id2 102

获取region的id

tiup ctl:v5.4.0 pd -u "http://192.168.0.101:2379"  region|jq|grep start_key -B 1|grep -v start_key|grep id|cut -d ":" -f 2|cut -d , -f 1 > region.id

暂停下

tiup cluster stop  tidb-test -N 192.168.0.101:20160

tikv修复工具
cp /root/.tiup/components/ctl/v5.4.0/tikv-ctl /sbin/

处理regions

for id in `cat region.id`;do echo $id;tikv-ctl --data-dir /data/tidb-data/tikv-20160/  unsafe-recover remove-fail-stores -s 1,2 -r $id;done;

全部处理好了以后启动

tiup cluster start tidb-test -N 192.168.0.101:20160

查看副本数

[root@lab101 tidb-data]# pd-ctl -u http://192.168.0.101:2379 config show|grep max-repl
    "max-replicas": 3,

设置完成以后,就可以访问了也不报region的错误了 tikv的修复完成了

tidb修复

全停了

tiup cluster stop  tidb-test -N 192.168.0.101:4000,192.168.0.102:4000,192.168.0.103:4000

强制缩容

tiup cluster scale-in tidb-test -N  192.168.0.102:4000,192.168.0.103:4000 --force

启动

tiup cluster start tidb-test -N  192.168.0.101:4000

这个单独启动就可以了 不存在修复问题

总结

tidb整体上跟ceph的架构有点像,这种按顺序进行处理恢复即可,数据在就可以恢复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武汉磨磨

打赏是写出更好教程的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值