Tidb单副本时-TiKV节点损坏后有损数据恢复的方法


背景

UAT环境下,为了减少存储. 搭建了一套单副本的TiDB集群
但是随着数据量的增多, UAT上面的数据可以丢失,但是表结构等信息是无法接受丢失和损坏的. 因为很多不太均衡的问题, 导致. 部分TiKV节点不稳定. 甚至会出现TiKV宕机的问题.
单副本时出现异常肯定会有部分数据丢失. 但是至少希望能够将环境挽救回来. 所以重要的事情说三遍
至少三副本, 至少三副本, 至少三副本
必须有备份
必须有备份
必须有备份

环境说明

1. 环境信息
四台服务器
6个TiDB
16个TiKV
4个TiFlash
需要注意:
一共 8块SSD用于存储TiKV
这里存在一个问题. TiDB其实是默认每个tikv 独占一个SSD的.
所以数据存储的capacity 是翻倍的. 2. 问题复盘
同事发现某一个TiKV总是出现disconnect的状态
然后执行了sacle-in的操作.
因为是单副本, 所以运行一段时间后发现机器都在报
9005 regions is unavailable的操作.
所以终止了scale-in
节点直接到了 down的状态.
然后再scale-in 节点存在数据的 表 都会报9005的错误
环境基本不可用.

修复思路

学习思路:
https://tidb.net/blog/ad45bad9 区别是, 我们是单副本, 某个tikv节点出现异常会丢失该节点上所有的regions.
思路主要是两个:
1. 删除所有regions的映射关系. 但是删除可能会导致更不可控的问题.
2. 将损坏tikv节点上面的regions 在其他节点创建一个空的regions. 诱导tidb查询过去.
不会出现 9005的错误, 返回空, 虽然丢失数据, 但是会查询返回. 思路1 不太可取. 删除操作可能带来更多的不可控
所以主要思路就在方案2 上面了.

环境准备

注意, 我这边的版本是 6.5.3
很多方式跟之前的操作步骤是不太相同的
为了快捷处理, 第一步是在tidb环境上面进行相关工具的创建与环境变量维护使用.
第一步: 安装
tiup ctl:v6.5.3
默认情况下会在
/root/.tiup/components/ctl/v6.5.3/ctl
目录下面创建一些ctl的工具. 修改环境变量
cat > /etc/profile.d/tidb.sh <<EOF
PATH=\$PATH:/root/.tiup/components/ctl/v6.5.3/
EOF
source /etc/profile.d/tidb.sh 工具验证
pd-ctl config show 停止调度:
pd-ctl config set region-schedule-limit 0
pd-ctl config set replica-schedule-limit 0
pd-ctl config set leader-schedule-limit 0
pd-ctl config set merge-schedule-limit 0 scale-out 一个tikv节点
yaml文件为:
tikv_servers:
- host: 192.168.xxx.xxx
port: 50160
status_port: 50180
data_dir: /nvme03/tidb/data/tikv-50160 tiup cluster scale-out erptidb xxx.yaml 查看tidb的信息
tiup cluster display erptidb 停止新增加的节点
tiup cluster stop erptidb -N 192.168.xxx.xxx:50160

处理过程

1. 查询宕机的tikv节点上面的 所有的regions.
查询所有的tikv对应的storeid
select * from information_schema.TIKV_STORE_STATUS
获取异常的store 的id. 2. 根据storeid 获取所有的regions id
select * from TIKV_REGION_PEERS where store_id = '258384'
注意,需要保存所有的 regions_id 我这次宕机有 25000 个regions. 3. 在tidb的主机上面创建空的regions .
tikv-ctl --data-dir /nvme03/tidb/data/tikv-50160 recreate-region -p 192.168.xxx.xxx:2379 -r 321115128
注意 -r 后面是 异常损坏的 regions-id 4. 注意时间可能会非常漫长, 创建完成后 可以删除掉之前有问题的store-id
然后开起来关闭的那个stop节点:
tiup cluster start erptidb -N 192.168.xxx.xxx:50160
pd-ctl store delete 258384 5. 验证集群是否可用, 之前保存的表是否可以正常 select 或者是执行delete 操作. 6. 恢复调度
pd-ctl config set region-schedule-limit 2048
pd-ctl config set replica-schedule-limit 1024
pd-ctl config set leader-schedule-limit 64
pd-ctl config set merge-schedule-limit 64

存在问题

怀疑是 6.5.3的bug 我有一个节点的容量特别高, 我也开启了 调度, 但是他死活调度不出来. 

也可能是开源版本的一些限制, 搞不太明白. 

使用minio 进行备份操作

now=`date +%Y%m%d%H`
export AWS_ACCESS_KEY_ID=miniouserpassword
export AWS_SECRET_ACCESS_KEY=miniouserpassword mkdir /nvme02/minio/tidb255119${now} time /root/.tiup/components/br/v7.2.0/br backup full -f '*.*' -f '!information_schema.*' -f '!emetrics_schema.*' --pd "192.168.xxx.xxx:2379" --storage "s3://tidb255119${now}" --s3.endpoint "http://192.168.xxx.xxy:9901" --send-credentials-to-tikv=true --log-file backupfull.log

idb单副本时-TiKV节点损坏后有损数据恢复的方法的更多相关文章

  1. thinkserer TD350 系统损坏后,数据恢复及系统重做过程

    电脑配置: 联想服务器 TD350   E5-2609V4 2*8G 2*4T+R1 塔式 单电 1.系统恢复: 试过很多种方法,均无效 2.数据恢复:  重新安装系统后,直接在D盘查找 , 原C盘的 ...

  2. 使用WdatePicker日期组件时,选择日期后,执行某个方法

    WdatePicker({onpicked:function(){alert(123);},dateFmt:'yyyy年MM月dd日',maxDate:'%y-%M-%d'}) 1.onpicked: ...

  3. php表单提交时获取不到post数据的解决方法

    找到了一位博主的方法完美解决,链接如下: http://blog.csdn.net/whd526/article/details/53263181

  4. tidb损坏tikv节点怎么恢复集群

    tikv节点宕机(机器再起不来),或者数据节点被rm -rf 掉了怎么办 正常情况下tikv节点down掉了.此时不要去执行store delete  store_id .数据一般可以正常访问,但是如 ...

  5. flask用宏渲染表单模板时,表单提交后,如果form.validate_on_submit()返回的是false的可能原因

    flask用宏渲染表单模板时,表单提交后,提交的内容符合DataRequired()校验, 但是form.validate_on_submit()返回的是False, 原因可能是表单模板中的<f ...

  6. C#TreeView节点选中后失去焦点时改变节点背景色

    C#TreeView节点选中后失去焦点时改变节点背景色 在使用TreeView控件时候,单击一个节点,当鼠标聚焦到别的地方的时候,之前点击的这个节点就看不清楚了 举例截图 单击后           ...

  7. es故障节点恢复后加入集群导致删除索引重新出现

    es的每个shard下的文件都可以看做一个完整的lucene文件,shard数据目录下的segment文件包含了索引的分片数量,副本数量.es shard可以恢复,就是因为每个shard都包含了一份数 ...

  8. rac 11g_第二个节点重启后无法启动实例:磁盘组dismount问题

    原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明以下出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  9. Consul的一个更新:服务端节点故障后重连

    研究了一段时间Consul,想写个攻略来着,但太赖了而且表达能力非正常人...今天发现HashiCorp果然接纳大众意见改了点东西.. 场景是: 假如Consul集群内有三个Server Node 时 ...

  10. RAID 损坏后如何对物理硬盘做完整镜像

    "磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能.利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上." ...

随机推荐

  1. 用Linux搭建网站(LAMP)

    安装环境 演示服务器版本为CentOS 8 安装apache 下载apache yum install httpd httpd-devel 启动apache服务器 systemctl start ht ...

  2. linux中mysql下载安装部署

    创建mysql文件 mkdir mysql 首先通过yum下载wget命令 yum -y install wget 在mysql文件中通过wget下载MySQL存储库 wget https://dev ...

  3. 创新 = 颠覆?AI创新如何做大蛋糕

    本文分享自华为云社区<创新 = 颠覆?AI创新如何做大蛋糕>,作者: 华为云PaaS服务小智 . 最近随着AI的风靡,各行各业都充斥着近乎疯狂的言论,"AI必将替代一切" ...

  4. 了解库开发,我们从STM32标准库开发学起

    摘要:从STM32新建工程.编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣. 自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题.对于追求开发速度的业 ...

  5. 开发老人笔记:Git 常用命令清单

    摘要:git是目前世界上最先进的分布式版本控制系统. 多人协作 master:此分支用来发布稳定的代码,合并一般是由管理员合并 dev:此分支用于团队开发,团队成员向此分支提交代码 bug:此分支用于 ...

  6. MindSpore实践:对篮球运动员目标的检测

    摘要:本文讲述的是MindSpore对篮球运动员目标的检测应用,通过AI技术辅助对篮球赛场进行分析. 本文分享自华为云社区<MindSpore大V博文系列:AI对篮球运动员目标的检测>,原 ...

  7. 如何对APP进行安全加固

    ​ 如何对APP进行安全加固 引言 如今,移动应用市场蓬勃发展,APP数量呈现爆炸性增长.随着5G技术的广泛应用,APP的增长趋势持续增强.然而,由于APP的泛滥,网络攻击者的目标也在逐渐转移,数亿的 ...

  8. 如何在上架App之前设置证书并上传应用

    ​ App上架教程 在上架App之前想要进行真机测试的同学,请查看<iOS- 最全的真机测试教程>,里面包含如何让多台电脑同时上架App和真机调试. P12文件的使用详解 注意: 同样可以 ...

  9. 火山引擎DataTester:AB实验平台未来演进趋势是怎样的?

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,DataFun联合行行AI举办第四届"数据智能创新与实践人工智能大会,火山引擎DataTester ...

  10. 字节跳动基于Doris的湖仓分析探索实践

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 Doris简介 Doris是一种MPP架构的分析型数据库,主要面向多维分析,数据报表,用户画像分析等场景.自带分析 ...