坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析
本文介绍了 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 的备份恢复特性打造成稳定可靠的高性能备份恢复解决方案。
相关文章:
坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析
本文介绍了 TiDB 数据库的基于时间点的恢复(PiTR)特性,该特性允许用户将数据库恢复到特定时间点,从而避免丢失重要数据。文章首先介绍了 PiTR 技术的基本概念和工作原理,接着探讨了 TiDB 对 PiTR 的优化,包…...
【云原生】K8S中PV和PVC
前言 容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。…...
24小时稳定性爆肝测试!国内外5款远程控制软件大盘点
本文目录前言一、ToDesk远程控制二、向日葵远程控制三、RayLink四、TeamViewer五、AnyDesk总结前言 不论你的职业是什么,从事互联网工作基本就离不开远程,从远程安装系统到远程搞设计,再到做服务器的调控,都需要靠远程来协助完成…...
【Java集合框架】篇三:List接口
1. List接口及主要实现类特点 List:有序、可重复(“动态”数组);因而常常使用List替换数组,因为List 的容量是动态的。 ArrayList:底层使用Object[]存储 线程不安全,添加、查找效率高 LinkedL…...
【算法经典题集】二分(持续更新~~~)
😽PREFACE🎁欢迎各位→点赞👍 收藏⭐ 评论📝📢系列专栏:算法经典题集🔊本专栏涉及到的知识点或者题目是算法专栏的补充与应用💪种一棵树最好是十年前其次是现在二分整数二分机器人…...
【c++】2023杭州月薪个税计算(chatGPT帮忙加注释)
参考信息 杭州市的个人所得税起征点是每月5000元。 个人所得税税率标准: 1、工资范围在1-5000元之间的,包括5000元,适用个人所得税税率为0%; 2、工资范围在5000-8000元之间的,包括8000元,适用个人所得税税率为3%; 3、工…...
【TypeScript】的上手学习指南!
目录TS简介TypeScript是什么?为什么要推荐使用TypeScript生态支持安装TypeScriptTS简介 TypeScript是什么? TypeScript官网 简介:TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。TypeScript可以在任何浏览器、任何计…...
红黑树(Insert())
文章目录红黑树代码红黑树性质红黑树vsAVL树红黑树的实现Insert()情况一:如果我插入的新节点时红色的情况二:叔叔是黑色或者不存在情况三: cur红,p为红,g为黑,u不存在或者为黑-双旋检查erase()红黑树vsAVL树红黑树的应用:红黑树 二叉搜索树 …...
MOV指令使用
mov用于数据传送。之后分为目的操作数和源操作数,目的操作数必须是通用寄存器或者内存单元:源操作数可以是具有相同数据宽度的通用寄存器或者内存单元,还可以是立即数。传送指令只影响目的操作数内容,不改变源操作数内容。 如&am…...
解释一下RecyclerView的适配器内部方法
RecyclerView的适配器(Adapter) 是一个连接数据模型和RecyclerView的桥梁,它在RecyclerView中提供了数据和布局之间的连接。下面是RecyclerView适配器中常用的几个方法的解释: 1.onCreateViewHolder(ViewGroup parent, int view…...
集合框架及背后的数据结构
1.介绍: Java 集合框架,又被称为容器是定义在 java.util 包下的一组接口 interfaces 和其实现类 classes 。 其主要表现为将多个元素置于一个单元中,用于对这些元素进行快速、便捷的存储、检索 、管理 ,即平时我们俗称的增删查改…...
【强化学习】强化学习数学基础:蒙特卡洛方法
强化学习数学方法:蒙特卡洛方法举个例子举个例子1:投掷硬币The simplest MC-based RL algorithm举个例子2:Episode lengthUse data more efficientlyMC without exploring starts总结内容来源将value iteration和policy iteration方法称为mod…...
BI分析工具软件有哪些
最近发现很多人讨论BI数据分析,今天给大家全面介绍下BI数据分析相关的信息。首先给大家科普一下,什么是BI分析。 BI分析其实是指通过BI分析工具,对企业内部和外部的大量数据进行收集、整理、处理和分析,以提供有价值的洞察&#x…...
2023爱分析·RPA软件市场厂商评估报告:容智信息
目录 1. 研究范围定义 2. RPA软件市场分析 3. 厂商评估:容智信息 4. 入选证书 1. 研究范围定义 RPA即Robotic Process Automation(机器人流程自动化),是一种通过模拟人与软件系统的交互过程,实现由软件机器人…...
设计模式之七大原则(二)——里氏替换原则、依赖倒转原则
1.里氏替换原则 里氏替换原则(Liskov Substitution Principle,LSP)由麻省理工学院计算机科学实验室的里斯科夫女士在 1987 年的“面向对象技术的高峰会议”(OOPSLA)上发表的一篇文章《数据抽象和层次》)里提…...
数据库日常实操优质文章分享(含Oracle、MySQL等) | 2023年2月刊
本文为大家整理了墨天轮数据社区2023年2月发布的优质技术文章,主题涵盖Oracle、MySQL、PostgreSQL等数据库的环境搭建、故障处理等日常实践操作,以及概念梳理、常用脚本等总结记录,分享给大家:Oracle优质技术文章概念梳理&基础…...
事件循环机制(Event Loop)和宏任务(macro-tast)微任务(micro-tast),详细讲解!!!
“事件循环机制” 和 “宏任务微任务” 也是前端面试中常考的面试题了。首先,要深刻理解这些概念的话,需要回顾一些知识点。知识点回顾1、进程与线程进程。 程序运行需要有它自己的专属内存空间,可以把这块内存空间简单的理解为进程每个应用至…...
mysql基础操作3
查询襄阳的员工姓名和性别,性别要求显示为 男 女SELECT ename,(CASE WHEN sexF THEN 女 ELSE 男 END)sexFROM empWHERE jiguan襄阳查询所有的订单,显示订单日期 订单数量 订单状态SELECT saleDate,salesQuantity,(CASE WHEN saleState1 THEN 新建 WHEN s…...
【Web安全】PHP安全
一、文件包含漏洞严格来说,文件包含就是代码注入的一种。代码注入,其原理就是注入一段用户能控制的脚本或代码并让服务器端执行。代码注入的典型代表就是文件包含。文件包含可能会出现在JSP、PHP、ASP等语言中,常见函数如下:PHP&a…...
双向链表+循环链表
循环链表双向链表 循环链表 循环链表是头尾相接的链表(即表中最后一个结点的指针域指向头结点,整个链表形成一个环)(circular linked list) **优点:**从表中任一结点出发均可访问全部结点 循环链表与单链表的主要差别当链表遍历时,判别当前…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
作为点的对象CenterNet论文阅读
摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表,并对每一个位置进行分类。这种做法既浪费又低效,并且需要额外的后处理。在本文中,我们采取了不同的方法。我们将物体建模为单…...
