坚如磐石:tidb基于时间点的恢复(pitr)特性优化之路丨6.5新特性解析

TiDB_PingCAP TiDB_PingCAP     2023-03-08     785

关键词:

本文介绍了 TiDB 数据库的基于时间点的恢复(PiTR)特性,该特性允许用户将数据库恢复到特定时间点,从而避免丢失重要数据。文章首先介绍了 PiTR 技术的基本概念和工作原理,接着探讨了 TiDB 对 PiTR 的优化,包括 PiTR 的技术指标,稳定性和性能提升。最后,文章展望了 TiDB PiTR 未来的改进方向,将持续探索备份恢复的更多可能性。

基于时间点恢复(PiTR)技术介绍

对于数据库产品而言,基于时间点的恢复是非常重要的基础能力,它允许用户根据需要,将数据库恢复到特定时间点,以帮助客户的数据库免受意外损坏或错误操作的影响。例如,数据库在某个时间点之后的数据遭受了意外的删除或损坏,则可以使用 PiTR 功能将数据库恢复到该时间点之前的状态,从而避免丢失重要数据。

由于 TiDB 数据库,每一次的数据改变都会产生对应的分布式日志,其中记录了数据库每一次变更的信息,包括事务 ID、时间戳和变更的具体内容。

当用户启用 PiTR 功能后,TiDB 会定期将分布式变更日志保存到外部存储(例如:AWS S3,Azure BloB 或 NFS 等)。如果在某个时间点之后的数据被意外删除或遭受了损坏,则可以使用 BR 工具将之前的数据库备份恢复回来,通过应用保存在外部存储上的数据改变到用户指定的时间点,从而达到定点恢复的目的。

上面的图示描述了 PiTR 特性的架构:当用户启动了日志备份之后,BR 工具会向 PD 注册一个备份任务。同时,某个 TiDB 节点会被选择成为日志备份的协调者,定期与 PD 进行交互,以便计算全局备份 checkpoint ts。同时,每个 TiKV 节点会运行定期向 PD 上报本节点的备份任务状态,并将数据变更日志发送到指定的外部存储上。

对于恢复过程,当用户发起了基于时间点的恢复命令之后,BR 工具会读取备份的元数据信息,并通知所有的 TiKV 节点启动恢复工作,TiKV 节点上的 Restore worker 会读取定点之前的变更日志并将其应用集群中,就可以得到指定时间点的 TiDB 集群。

PiTR 特性的工作机制

接下来,我们进一步看一下日志备份和恢复过程的工作机制。

下面的流程图说明了日志备份的主要工作机制

其中主要的交互流程如下:

1.BR 接收备份命令 br log start

解析日志备份任务的日志备份起始时间点和备份存储地址,并向 PD 注册日志备份任务 (log backup task)。

2.TiKV 定期监测新建/更新的日志备份任务

每个 TiKV 节点的日志备份 observer 监听 PD 中创建与更新日志备份任务,然后备份该节点上在备份时间范围内的变更数据日志。

3.TiKV 节点备份 KV 变更日志,并将本地备份进度上报到 TiDB

TiKV 节点中 observer 服务会持续地备份 KV 变更日志,联合从 PD 查询到的 global-checkpoint-ts 来生成备份元数据信息,并定期将日志备份数据和元信息上传到存储中,同时 observer 服务还会防止未备份完成的 MVCC 数据被 PD 回收。

4.TiDB 节点计算并持久化全局备份进度。

TiDB 协调者节点轮询所有 TiKV 节点,获取各个 Region 的备份进度 ,并根据各个节点的备份进度计算出整体日志备份的进度,然后上报给 PD。

对于恢复的过程,可以参考下面的流程图了解其工作机制

当用户发起“br restore ” 命令后,BR 工具会对全量数据和日志数据备份地址、需要恢复到的时间点,需要恢复的数据库对象等信息进行校验,确保信息有效后,开始进行恢复。BR 首先会将全量数据进行恢复,之后读取存在的日志备份数据,计算需要恢复的日志备份数据,并访问 PD 获得需要恢复的 Region 和 KV range 相关的信息,创建恢复日志请求,发送给对应的 TiKV 节点。 TiKV 节点在接收到恢复请求后,启动 restore worker,并从备份介质中下载相应的备份数据到本地,并将需要回复的数据改变恢复到对应的 region 当中。在恢复完成之后,将恢复的执行的结果返回给 BR 工具。

TiDB 对 PiTR 的优化

从上面的工作机制可以看到, 无论是日志备份还是恢复,其过程都是比较复杂的,所以 TiDB 在PiTR 发布之后,一直对这个特性进行优化,不断的提升 PiTR 的技术指标,稳定性和性能。

例如, 在最初的版本中日志备份会产生大量的小文件,给用户在使用期间带来很多的问题。在最新版本中,我们将日志备份文件聚合成为多个大小至少为128M的文件,很好的解决了这个问题。

对于大规模的 TiDB 集群,其全量备份往往需要运行很长时间,如果不支持断点续传功能的话,当备份过程中出现一些异常情况,导致备份任务中断的话,对用户来说是非常令人绝望的。在 6.5.0 版本中,我们支持了备份的断点续传能力,并且优化了备份的性能,目前单个 TiKV 的数据备份性能可以达到 100MB/s,日志备份对源集群的性能影响可以控制在 5% 左右,这些优化都极大的提升了大规模集群备份的用户体验和备份的成功率。

由于备份恢复通常都会被用户作为数据安全的最后一道防线,PiTR 的 RPO 和 RTO 指标也是很多用户所关心的。 我们在 PiTR 的稳定性上也做了很多的优化,其中包括:

  • 通过优化 BR 与 PD 和 TiKV 的通信机制,在绝大多数 TiDB 集群异常场景和 TiKV 滚动重启场景,PiTR 都可以保证 RPO 小于 5 分钟
  • 通过优化恢复性能,让 PiTR 在应用日志阶段的性能达到30 GB/h,从而降低降低 RTO 时间。

对于更多的备份恢复性能指标,请参考“TiDB 备份与恢复概述” 文档。

未来规划

接下来,我们会对 PiTR 这个特性进行更多的优化,不断的提升这个特性的稳定性和性能。并探索备份恢复的更多可能性,将 TiDB 的备份恢复特性打造成稳定可靠的高性能备份恢复解决方案。

Postgres 连续归档和时间点恢复 (PITR)

】Postgres连续归档和时间点恢复(PITR)【英文标题】:PostgresContinuousArchivingandPoint-in-TimeRecovery(PITR)【发布时间】:2018-04-1115:11:27【问题描述】:我正在尝试在Postgres中设置连续存档和时间点恢复(PITR)。当我通过documentation它说:归档... 查看详情

Greenplum 数据库中的时间点恢复

】Greenplum数据库中的时间点恢复【英文标题】:Point-In-time-recoveryinGreenplumDatabase【发布时间】:2020-06-0116:41:55【问题描述】:我们最近设置了greenplum。现在主要关注的是为PITR设置策略。Postgres提供了PITR功能,但我对它在greenplum中... 查看详情

PostgreSQL PITR 无法正常工作

...正常工作【英文标题】:PostgreSQLPITRnotworkingproperly【发布时间】:2018-06-0508:46:28【问题描述】:我正在尝试将PostgreSQL数据库恢复到某个时间点。当我在recovery.conf中仅使用restore_command时,它工作正常。restore_command=\'cp/var/lib/pgsql/pg_... 查看详情

tidboperator恢复持久卷上的备份文件

...上的备份数据恢复到K8S集群环境上。本文介绍的恢复方法基于TiDBOperator的CustomResourceDefinition(CRD)实现,底层使用​​BR​​工具来恢复数据。BR全称为Backup&Restore,是TiDB分布式备份恢复的命令行工具,用于对TiDB集群进行数据备... 查看详情

猿创征文|国产数据库tidb架构特性(代码片段)

...原生的分布式数据库、兼容MySQL5.7协议和MySQL生态等重要特性。目标是为用户 查看详情

大数据大数据组件tidb原理+实战篇(代码片段)

...史1.2.从MySQL到TiDB1.3.TiDB概述1.4.数据库种类简介2.TiDB架构特性2.1.TiDB整体架构2.2.TiDB核心特性2.3.存储和计算能力3.TiDB安装部署3.1.TiDB-Local单机版3.2.TiDB-Docker集群版4.TiDB实践案例4.1.TiDB-SQL操作4.2.TiDB-读取历史数据4.3.TiDB整合 查看详情

tidb6.0placementrulesinsql使用实践(代码片段)

...a;吴永健https://tidb.net/u/banana_jian简介TiDB6.0版本正式提供了基于SQL接口的数据放置框架(PlacementRulesinSQL),特性用于通过SQL接口配置数据在TiKV集群中的放置位置。通过该功能,用户可以将表和分区指定部署至不同... 查看详情

tidb-使用br工具进行数据热备份与恢复(代码片段)

一、BR工具BR全称为Backup&Restore,是TiDB分布式备份恢复的命令行工具,用于对TiDB集群进行数据备份和恢复。BR只支持在TiDBv3.1及以上版本使用。在前面的章节中,我们介绍了dumpling将数据导出的方式,也可以作为... 查看详情

使用闪回功能快速恢复用户的误操作

...,如果需要恢复因用户错误导致的数据丢失,需要大量的时间和精力去做不完全恢复。不过,这种用空间换时间的策略也存在限制,不可能无限地恢复任何时间点的误操作。针对那些“及时”发现的误操作,使用该方法进行恢复... 查看详情

跟随一条insert语句,进入tidb的源码世界(上)

TiDB是googleF1的开源实现;TiDB实现了基于mvcc的乐观锁,在线表结构变更,基于时间戳的数据线性一致性,等等;为了可靠性,TiDB和Oracle一样,维护了百万级别的自动化测试用例,跑在k8s搭建的集群之上;TiDB里面用到的算法,都... 查看详情

pghoard面向云存储的pg备份&&恢复工具

...enStackSwift,Azure,Ceph)直接从对象存储备份,压缩和加密时间点恢复(PITR)从对象存储备份初始化新备用数据库,自动配置为复制热备用数据库参考资料https://github.com/aiven/pghoard     查看详情

tidb整体架构及主要特性

参考技术A首先,贴出的是TiDB的架构图。TiDB集群主要包括三个核心组件:TiDBServer,PDServer和TiKVServer。此外,还有用于解决用户复杂OLAP需求的TiSpark组件。TiDBServer负责接收SQL请求,处理SQL相关的逻辑,并通过PD找到存储计算所需数... 查看详情

binlog-rollback.pl基于binlog位置点和时间点恢复delete误删语句(代码片段)

一、基于binlog位置点的恢复为了演示,刷新一个新的binlog文件,让它单独记录delete删除语句:MySQL[zhangyou]>flushlogsQueryOK,0rowsaffected(0.09sec)MySQL[zhangyou]>showmasterstatus\G***************************1.row******************** 查看详情

mysql数据库备份(增量备份与恢复)(代码片段)

...据的恢复步骤3.完全备份之后丢失所有数据的恢复步骤4.基于时间点与位置的恢复①基于时间点的恢复②基于位置操作总结前言前面说了完全备份有两种方式,一种是使用tar打包数据文件,另一种是使用mysqldump进行完 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

...库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-compose1.下载tidb-docker-co... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

...库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-compose1.下载tidb-docker-co... 查看详情

猿创征文|国产数据库实战之使用docker部署tidb集群(代码片段)

...库实战之使用Docker部署TiDB集群一、TiDB介绍1.TiDB简介2.TiDB特性3.TiDB集群整体架构4.TiDB集群各部分介绍5.本次TiDB集群组件二、检查本地环境1.检查docker状态2.检查docker版本3.检查docker-compose版本三、下载tidb-docker-compose1.下载tidb-docker-co... 查看详情

PITR 后 recovery.conf 未更改为 recovery.done

...标题】:recovery.confnotgettingchangedtorecovery.doneafterPITR【发布时间】:2018-09-0607:20:41【问题描述】:在recovery.conf中,如果我们将recovery_target_time作为2018-09-0703:25:46(没有EST)并重新启动PostgreSQL,recover 查看详情