周日的时候帮助网友恢复了tidb服务器现在记录如下。我发现很多伙伴不会用使用 pd-recover

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】
【附件:截图/日志/监控】
因为是测试机器。一切从简。

原有的服务器如下

步骤

1编辑集群拓扑

cat > topology.yaml << EOF

global:

user: “tidb”

ssh_port: 22

deploy_dir: “/tidb-deploy”

data_dir: “/home/tidb-data”

server_configs:

tidb:

log.slow-threshold: 300

tikv:

storage.engine: partitioned-raft-kv

pd_servers:

  • host: 192.168.137.2

tidb_servers:

  • host: 192.168.137.3

tikv_servers:

  • host: 192.168.137.4
  • host: 192.168.137.5
  • host: 192.168.137.6

monitoring_servers:

  • host: 192.168.137.5

grafana_servers:

  • host: 192.168.137.5

alertmanager_servers:

  • host: 192.168.137.5

EOF

2.下载&&解压&&配置免密

curl -O https://download.pingcap.org/tidb-community-server-v6.6.0-linux-amd64.tar.gz

tar zxf https://download.pingcap.org/tidb-community-server-v6.6.0-linux-amd64.tar.gz

cd tidb-community-server-v6.6.0-linux-amd64

3.免密

ssh-keygen

ssh-copyid root@127.0.0.1

4.安装tidb

bash local_install.sh

source /root/.bash_profile

tiup cluster check ./topology.yaml --apply

tiup cluster deploy tidb-test v6.6.0 ./topology.yaml

tiup cluster start tidb-test
这个时候整个tidb就启动正常了。用上面的脚本是自动化安装的不需要人工参与。

我们往数据库里面写入点数据

create database oscardba;

use database oscardba;

create table oscardbatable;

这个时候我们模拟pd故障

开启压力测试。然后硬件断电pdserver服务器

因为是断电关机。所以pd数据库会损坏。导致整个集群不可用。

这个时候我们再开始pd服务器会发现pd服务器不可用 整个tidb服务器瘫痪。

进入系统后发现pd 服务不可用。

好现在开始我们恢复pd server的表演

在pd 恢复的时候需要我们知道2个参数 cluster id 和最大的已分配 pd号

cat {{/path/to}}/pd.log | grep “init cluster id”

cat {{/path/to}}/pd*.log | grep “idAllocator allocates a new id” | awk -F’=’ ‘{print $2}’ | awk -F’]’ ‘{print $1}’ | sort -r -n | head -n 1

因为我的pd没有数据了 日志被我删除了一次。所以用官方的办法没办法获取最大的分配数字 我自己想了个办法。

我找了commit 里面有id 还有lastindex 应该就是系统的最大分配id 14015995 我自己再加了1000000 15015995

全部完成后先杀了pd

ps -ef | grep pd-server | grep -v grep | cut -c 9-15 | xargs kill -s 9

mv /data/tidb-data/pd-2379 /data/tidb-data/pd-2379bak

备份完成再重启pdserver

service pd-2379 start

这个时候pdserver是空的 需要用pd工具恢复

curl -O https://download.pingcap.org/tidb-community-toolkit-v6.6.0-linux-amd64.tar.gz

tar zxf tidb-community-toolkit-v6.6.0-linux-amd64.tar.gz

cd tidb-community-toolkit-v6.6.0-linux-amd64

tar zxf pd-recover-v6.6.0-linux-amd64

./pd-recover -endpoints http://192.168.1.2:2379 -cluster-id 6747551640615446306 -alloc-id 10000

这个时候恢复成功会报 sucess

你需要先把pdserver 关闭再重启

service pd-2379 stop

service pd-2379 restart

这个时候pd服务器就恢复成功了。

tidb的服务器进去就正常了

4 个赞

:+1: :+1: :+1:感谢大佬分享

菜鸟前排来学习

:+1: :+1: :+1:

我也不会 :grinning: 没实践过。
大佬可以整理下,写个专栏文章啊。