TiDB备份恢复方式你知多少?

背景

学习一款数据库,要学会备份和恢复。备份是一个严谨的工作,作为一个dba,掌握数据库备份、恢复的各种手段。

下面让我们一起来看看TiDB的备份恢复有那些手段吧。

基于MVCC的恢复方式

相关原理已经在上一篇文章写过了,这里就不在做过多的描述了。

TiDB用什么保证备份的一致性?

简单的回顾一下,TiDB的TiKV里面的MVCC的格式是基于时间戳的。

(key-versionT(SO全局唯一递增时间戳)-->vlues)

会有定时GC来清理过期的版本(数据)。

下面的工具都是基于MVCC的方式,假设数据以及被GC清理掉了,那么数据就不能恢复过来。

第一款工具 snapshot

TiDB自带工具,可以针对当前会话读到指定的历史版本。

UPDATE mysql.tidb SET VARIABLE_VALUE = '80h' WHERE VARIABLE_NAME = 'tikv_gc_life_time';#更改GC时间
sql="SET SESSION tidb_snapshot = '415599012634951683'"。#跳转GC时间
#微信公众号只能传3个视频,我把不能传的视频发百度云盘了链接:https://pan.baidu.com/s/1QDmFk-9-N-gcNMJr5ZqXzQ提取码:anxp

工具说明:只能恢复dml,不能恢复ddl。

第二款工具 Recover

TiDB自带工具,可以针对drop table 语句进行恢复。

drop table t2;#删除表recover table t2; #恢复表
#微信公众号只能传3个视频,我把不能传的视频发百度云盘了链接:https://pan.baidu.com/s/1QDmFk-9-N-gcNMJr5ZqXzQ提取码:anxp

工具限制:只能恢复drop table的操作,不能恢复truncate table,delete操作。未来可能会被 Flashback取代。

第三款工具 Flashback

TiDB自带工具,可以针对truncate操作。

http://mpvideo.qpic.cn/0bf2lqaauaaaymaggo4iobpfaxgdbjoaacqa.f10002.mp4?dis_k=52aa889baa11da93e26014a4a7ef1b25&dis_t=1586942861

工具限制:只能恢复truncate,drop等ddl的操作,没有办法恢复dml操作。

工具总结:

  1. 如果使用上述三种工具 要保证误操作的范围在GC清理之前。如果数据以及被GC清理了,则无法使用。
  2. 目前推荐大家要了解掌握上述三种工具的基础的操作,避免在真正的误操作发生的时候,能快速恢复。

基于文件的恢复方式

所谓基于文件的恢复方式,指备份的结果集存储在文件中,例如全备份,增量备份等。

第一款工具mydumper/loader

TiDB官方推荐的备份工具mydumper,经过官方的修改和优化。

在备份的时候,去除了FTWRL锁等待,而且支持并行备份,大幅提升了备份效率。

./bin/mydumper -h 127.0.0.1 -u root -P 4000 #执行备份./bin/loader -d 备份路径 -h 127.0.0.1 -u root -P 4000 #恢复备份#微信公众号只能传3个视频,我把不能传的视频发百度云盘了链接:https://pan.baidu.com/s/1QDmFk-9-N-gcNMJr5ZqXzQ提取码:anxp

如果大家嫌弃导入慢,可以用TiDB官方推荐的生态工具TiDB Lightning 。能给提升TiDB的导入效率。

第二款工具TiDB binlog

TiDB binlog,可以用于增量恢复TiDB集群。

还可以适用于 TiDB同步下游TiDB集群、MySQL、Kafka。

TiDB binlog分为2个组件Pump和Drainer 两个组件,先给大家介绍一下。

Pump组件:

  1. 用于实时记录TiDB产生的Binlog。
  2. 将binlog按照时间提交时间进行排序。
  3. 在提个给Drainer组件进行消费。

Drainer组件:

  1. 收集各个Pump中收集的Binlog进行归并。
  2. 将Binlog转行成SQL或者指定格式的数据。

#感觉好像MySQL的io thread和sql thread。

增量恢复的方法我已经传到视频中了,大家可以看看。

第三款工具BR

TiDB最近提供的一款分布式备份恢复工具BR,可以针对TiDB集群进行备份和恢复。

使用限制:

  1. 只支持TiDBv3.1及以上版本
  2. 目前需要nfs作为共享磁盘

备份原理:

  1. 从pd中获取当前的TSO作为备份快照的时间点。
  2. 当前集群的TiKV节点信息。

下面的br在执行的日志。也可以大概的看出相关的内容。

[2020/04/04 17:16:37.610 +08:00] [INFO] [log-file=/tmp/br.log.2020-04-04T17:16:37+08:00]  [pd="[10.206.0.3:2379]"] [storage=local:///export/backup] [timeago=0s]#说明备份日志输出位置,pd节点,备份结果集[2020/04/04 17:16:37.612 +08:00] [INFO] [base_client.go:226] ["[pd] update member urls"] [old-urls="[http://10.206.0.3:2379]"] [new-urls="[http://10.206.0.16:2379,http://10.206.0.3:2379,http://10.206.0.6:2379]"]#获取整个pd集群
[2020/04/04 17:16:37.622 +08:00] [INFO] [ddl.go:321] ["[ddl] start DDL"] [ID=b823eca8-e3e5-4969-a67f-5ff3b6210d1d] [runWorker=false][2020/04/04 17:16:37.647 +08:00] [INFO] [domain.go:144] ["full load InfoSchema success"] [usedSchemaVersion=0] [neededSchemaVersion=87] ["start time"=5.263313ms][2020/04/04 17:16:37.648 +08:00] [INFO] [domain.go:368] ["full load and reset schema validator"]#获取对应的表结构[2020/04/04 17:16:37.650 +08:00] [INFO] [client.go:112] ["backup encode timestamp"] [BackupTS=415758233800278018]#获取备份的时间点tso[2020/04/04 17:16:37.657 +08:00] [INFO] [client.go:222] ["change table AutoIncID"] [db=tian] [table=t1] [AutoIncID=2000001]#开始执行db为tian,table为t1的备份

此时根据备份子命令,会有两种备份逻辑:

  • 全量备份:BR 遍历全部库表,并且根据每一张表构建需要备份的 KV Range
  • 单表备份:BR 根据该表构建需要备份的 KV Range

最后,BR 将需要备份的 KV Range 收集后,构造完整的备份请求分发给集群内的 TiKV 节点。 https://pingcap.com/docs-cn/dev/reference/tools/br/br/

这段话来自官方文档,我简单的描述,大家会更好的理解。

  1. 每个Region都有Region Leader,每个Region Leader都分布在不同的TiKV上。
  2. BR 首先知道备份哪些KV Range,然后把备份的KV Range收集后。构建一个完整的备份请求,下发给所有的TiKV节点。
  3. TiKV收到这些备份请求,开始执行备份命令。

备份文件类型

sst文件:存储TiKV备份下来的数据信息。

backupmeta文件:存储本次备份的元信息。

实际操作

实验环境:腾讯云

机器配置:4C8G

数据大小:57G

备份耗时:大于9分钟小于10分钟

TIKV数量:3个

备份大小:50G(官方好像没做压缩啊,期待GR版本在此处能够完善改进)

[2020/04/04 19:17:30.808 +08:00] [INFO] ["Full backup Success summary: total backup ranges: 15,total success: 15, total failed: 0, total take(s): 544.32, total kv: 285323076, total size(MB): 58774.74, avg speed(MB/s): 107.98"]["backup checksum"=1m51.113016071s]["backup fast checksum"=59.215757ms]["backup total regions"=699]

备份时性能影响:

br备份影响相对较小,因为备份指令都下发到不同的TiKV节点,TiKV会承担备份压力。

总结

相信大家看了这么多内容,大家应该会TiDB备份恢复方式有了一定的了解。

可以对集群设置N个小时的GC超时时间:没超过这N个小时的误操作,可以通过基于MVCC的方式进行恢复。可以根据不同的语句来,选择不同的恢复方式。如果超过了N个小时,可以选择binlog的方式进行增量恢复。

mydumper和br工具,我个人感觉更适合

  1. 灾难式恢复(整个集群都挂了,例如所有磁盘坏了,机柜宕机。但TiDB本身就是分布式,所以这个可能性不大。
  2. 构建新的集群,做集群之间的同步。

安利一下:官方推出了增量同步工具CDC ,一句话描述他的有点:基于“redo log” 同步。

TiDB备份恢复方式你知多少?相关推荐

  1. 备份集过期时间_TiDB备份恢复方式你知多少?

    背景 学习一款数据库,要学会备份和恢复.备份是一个严谨的工作,作为一个dba,掌握数据库备份.恢复的各种手段. 下面让我们一起来看看TiDB的备份恢复有那些手段吧. 基于MVCC的恢复方式 相关原理已 ...

  2. 数据库系列之TiDB备份恢复

    BR工具用于TiDB集群的备份恢复,适合大数据量的备份恢复场景.本文简单介绍BR备份恢复原理和流程以及BR命令行的使用,并结合实际备份恢复场景加以测试验证. TiDB集群数据的备份恢复使用Backup ...

  3. Clickhouse备份恢复方式概览

    文章目录 一.冷备 二.热备 2.1 数据导入导出 2.2 快照表 2.3 FREEZE备份 2.4 FETCH备份 三.数据恢复 常见备份方式概览 备份方式 特点 物理文件备份 对物理文件进行拷贝, ...

  4. hbase的备份恢复1,Expor过程,Import过程,统计hbase表行数;hbase备份恢复方式2:使用hdfs备份hbase数据,基于hbase数据进行恢复

    25.28 hbase数据备份和恢复 以下过程针对线上没有启动新旧集群的情况,所以使用hbase export / import的方式进行数据的备份和迁移 25.28.1 Export过程 首先,先进 ...

  5. 中级篇——树莓派系统备份恢复的两种方式

    树莓派系统备份恢复 方式一: 使用树莓派烧录工具,Win32DiskImager 工具的读取功能,如下图.优点是操作简单,缺点也很明显,因为是全盘读取,所以读取的备份文件非常大,不利于传播分享.所以p ...

  6. DM7备份恢复常见命令

    注意需要查看dmap服务是否正常. –联机备份数据库(数据库处于OPEN状态) ./disql SYSDBA/SYSDBA:5280 BACKUP DATABASE FULL BACKUPSET '/ ...

  7. King大咖成就计划系列直播 | 人大金仓数据库备份恢复

    人大金仓是成立最早的国产数据库厂商,自1999年成立以来,以助力企业级应用高质量发展为使命.数据库管理系统是各类企业级应用不可或缺的基础性平台,为数据的归集.分类.组织.处理.存储.分析和应用的全生命 ...

  8. TiDB数据库备份恢复与数据迁移

    TiDB数据库备份恢复与数据迁移 数据迁移 使用 mydumper/loader 全量导入数据 mydumper/loader 全量导入数据最佳实践 某次导入示例,以及相关的配置 从 MySQL 导出 ...

  9. c++ 操作oracle 最佳方式_oracle备份恢复基础详解

    一.Oracle备份方式分类: Oracle有两类备份方式: (1)物理备份:是将实际组成数据库的操作系统文件从一处拷贝到另一处的备份过程,通常是从磁盘到磁带. 物理备份又分为冷备份.热备份: (2) ...

最新文章

  1. java word模板替换多行_java poi word模板替换段落的换行显示
  2. 需要氪金吗_《天堂2:血盟》到底需不需要氪金?玩家:可以但是没有必要
  3. selinux关闭后mysql_centos下关闭selinux不重启的方法
  4. fork、vfork、wait、waitpid
  5. Laravel 不同环境加载不同的.env文件
  6. 《每个设计师都应该掌握的50个css代码段》11~20段
  7. Flume 知识点总结
  8. Python-print学习
  9. sqlyong 安装教程
  10. 计算机技术与课堂教学整合,浅谈信息技术与课堂教学深度融合
  11. 价值1000元的微信二维码活码管理系统网站源码分享
  12. 技嘉服务器主板是什么型号,技嘉主板小型号字母代表什么意思?
  13. java buildpack是什么_javabuildpack改造
  14. 毕业设计-基于微信小程序的临沂旅游应用系统
  15. 淘晶驰串口屏_提示p0.pic 初始值无效:图片ID无效
  16. Matlab绘图-详细全面(图)
  17. Oracle-多表查询
  18. 东大acm预备队第一次双周赛
  19. 贪吃蛇 java实现超简单的贪吃蛇(附源代码)
  20. C语言if语句学习,判断年龄并且提示语句!

热门文章

  1. 必看企业级Redis锁资产巡检扫描业务场景实现(加锁限制扫描次数)
  2. 联通宣布用户存费1300元可获赠21M上网卡
  3. eax, ebx, ecx, edx, esi, edi, ebp, esp 各寄存器作用
  4. Nginx设置禁止通过IP访问服务器
  5. Intro.js轻松搞定页面引导流程
  6. js前端——滑稽官网的亮瞎眼系列滑稽大法
  7. VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”
  8. 【今日CS 视觉论文速览】1 Jan 2019
  9. Ubuntu下安装visual studio code
  10. 【C++ STL学习之三】容器deque深入学习