提一个问题 如果我三副本的tidb,pd节点丢失。tikv有损坏。怎么恢复数据?

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

提一个问题 如果我三副本的tidb,pd节点丢失。tikv有损坏。怎么恢复数据?
也就是3副本的tikv 能从一个节点把数据恢复出来吗

三副本的tikv,每个tikv节点上都有其它两个节点的副本数据,理论上是可以恢复的

有具体的操作步骤么

正常来说,每个节点是只有一个副本的,SELECT * FROM ( SELECT region_id, COUNT(*) AS rc FROM TIKV_REGION_PEERS rp LEFT JOIN TIKV_STORE_STATUS ss ON rp.store_id = ss.store_id WHERE ADDRESS LIKE '10.10.10.1:%' -- 这里记得换下对应的 IP 地址 GROUP BY REGION_ID ) tmp WHERE rc > 1;

可以根据这个查一下,副本小于1的话,理论上可以恢复,要看你存储的lable怎么打的了

大佬可以参考这几个文章:

2 个赞

:yum:带着这三篇文章,可以走遍整个社区。

个人觉得要先重建pd,然后修复tikv。

pd集群只是存储元数据信息,并且是通过tikv心跳上报,故pd集群的所有数据丢失后,整个tidb集群可以通过重建pd集群修复;

理论上可行,实际上你估计得找原厂了

TiDB和PD有问题不影响,主要还是三副本的TiKV,如果只是一个副本损坏还好,如果是两个副本损坏,就麻烦了。

理论上可行,实际上你估计得找原厂了

你的这个问题其实就是tikv有损坏要怎么恢复,因为pd就算都down了起不来了,也可以用pd recover来重建pd集群。pd起来之后,其他组件都可以拉起了。那么就只用看tikv的损坏程度,是否能够恢复数据了,只要是少数节点丢失,大概率可以正常恢复数据

1 个赞

:100: :100:

难实际操作中的各种报错

拜读 :clap: :slightly_smiling_face:

大佬非常专业啊

根据备份的 PD 配置信息和拓扑结构,在新节点上启动 PD 进程。逐个启动缺失的 TiKV 节点,并将其加入集群。如果有损坏数据的节点,可以尝试修复或替换硬盘,然后重新添加至集群。根据备份数据,使用TiDB 中的 importer 工具等方法将数据重新导入集群。

做好全备份,日志实时保留,这是硬道理,要是遇到这种程度的损坏,估计恢复备份时间比重建快多了

收藏一下

停止所有kv节点,执行以下语句。命令将一些失败掉的机器从所有 Region 的 peers 列表中移除。这样,这些 Region 便可以在 TiKV 重启之后以剩下的健康的副本继续提供服务了。
tikv-ctl --db /path/to/tikv/db unsafe-recover remove-fail-stores 1
执行完以上语句后。在pd工具下查看store信息:
“state_name”: “Tombstone” 表示下线成功的 TiKV 节点

参考下这个 专栏 - TiKV 多副本丢失以及修复实践 | TiDB 社区

这得看有多少个TiKV节点损坏了,如果region损坏的peer小于一半,集群是不会丢失数据,大于一半但是开启sync-log=true也不会丢失数据