TaurusDB库表时间点极速恢复,大幅缩短数据恢复时间
经过多组实验对比,对于大实例下仅需恢复几张表数据的情况,有显著优化效果。尤其针对游戏业务等需要频繁回档的场景,将大幅度缩短因数据恢复导致的停服时间。后续我们将逐步在公有云上开放此特性,以惠及更多用户。
本文分享自华为云社区《【华为云MySQL技术专栏】TaurusDB库表时间点极速恢复》,作者:GaussDB 数据库。
1.背景介绍
云上客户经常出现误删表、删库等操作。针对这类问题,业界普遍提供库表级恢复方案。首先,在后台将选中时间点的全量数据和增量数据恢复至一个临时实例,然后,自动导出用户需要恢复的表,再将这些表恢复至原实例,以此降低对原实例的影响。
然而,为了确保数据完整性,这一过程通常涉及整个实例的完整恢复,较长的恢复时间导致客户对该方案不甚满意。尤其是当恢复的表数据量远小于整个实例时,如恢复3T实例中仅20M的表,却需先完成整个3T实例的PITR(Point-in-Time Recovery,时间点恢复),再进行表数据的导入导出,不仅效率低下,而且合理性存疑。
针对以上问题,TaurusDB结合自身架构特点,通过优化表级恢复流程,推出表级极速恢复方案,做到恢复时间仅和待恢复表数据量有关,而非整个实例的规模,从而大幅降低RTO,提升服务可用性。
2.原理介绍
2.1多区间分段下载
TaurusDB云原生数据库采用计算与存储分离架构,其备份原理参考官网https://support.huaweicloud.com/usermanual-gaussdbformysql/gaussdbformysql_03_0052.html
TaurusDB存储的最小管理单元被定义为64MB的plog。在plog上,页面数据以16KB的粒度离散存储。为了实现细粒度的数据恢复,需要基于华为云对象存储服务(OBS)所提供的多RANGE下载能力。

图1 多RANGE仅下载示例
如图1所示,我们将分散在多个plog上的表数据下载下来,再合并成一个新plog,并在log directory中完成位置更新。
2.2 表空间存储映射
TaurusDB在存储侧的管理单元被称为slice,在计算侧由SliceManager模块管理从[tablespace id, pageno]到slice的映射关系,每个slice在逻辑上被分配10G存储空间。
如图2所示,对于tablespace id为8的表,我们仅需要恢复slice1和slice3.

图2 表与slice的映射关系
这组关系会被持久化到文件中,用于重启后的继续查询。当然,备份模块也需要在恢复时更新相关的slice信息,以确保恢复后表映射到新创建的slice上。
2.3 表空间变化记录跟踪
通过上面介绍,我们知道可以根据需要恢复的表tablespace id,识别出需要恢复哪些slice中的对应的plog中的表数据,但实际上客户在使用表级恢复时,通常提供的是表名信息,因此需要了解表名与表tablespace id之间的映射关系。这组映射关系可以通过INNODB_TABLESPACES 表实时查询,但drop , create , rename等DDL操作会更改表的tablespace id,因此,在实际操作中需要注意这一点。

图3 表tablespace id变化过程
如图3所示,当系统恢复到T2时刻,表A的tablespace id就是12,而T3时刻及之后所识别到drop语句,会直接返回错误,因为当前的时间段及之后无该表存在。
TaurusDB在增加备份过程中,通过额外记录涉及表的tablespace id变更的信息,在做库表级时间点极速恢复时,系统会利用这些记录信息,结合全量备份的表空间信息,得到恢复时间点时刻表名对应的tablespace id。
3. 整体流程解析
表级恢复业务整体流程,如图4所示:

图4 表级恢复业务整体流程
管控Agent下发待恢复表名+时间点,获取到恢复表tablespace id;
全量恢复会根据表tablespace id获取要恢复的slice列表,下发恢复任务到存储侧,恢复指定plog;
启动MysqlD,InnoDB层根据表tablespace id,不在列表的显示为DB_CANNOT_OPEN_FILE,回放增量日志时,跳过非恢复表日志;
利用mydumper和myloader导出导入表。
4. 应用
以某公有云上的某用户使用的2T实例恢复为例,对一张大小为12M的表进行测试,优化前后整体耗时对比,如图5所示:

图5 表级恢复优化前后耗时对比
从图中数据对比可以看出,优化后恢复的数据量从TB降低到MB,整体恢复时间仅为优化前所需时间的21%。
此外,创建实例阶段,通过并行化处理各个子步骤,降低了所需时间。在表导入导出阶段,针对开源mydumper和myloader工具,通过调整相应的策略,显著提升了数据恢复性能,详见https://bbs.huaweicloud.com/blogs/433475。
5. 总结
TaurusDB凭借库表时间点极速恢复特性,大幅减少了恢复所需的数据量。经过多组实验对比,对于大实例下仅需恢复几张表数据的情况,有显著优化效果。尤其针对游戏业务等需要频繁回档的场景,将大幅度缩短因数据恢复导致的停服时间。后续我们将逐步在公有云上开放此特性,以惠及更多用户。
华为开发者空间,汇聚鸿蒙、昇腾、鲲鹏、GaussDB、欧拉等各项根技术的开发资源及工具,致力于为每位开发者提供一台云主机、一套开发工具及云上存储空间,让开发者基于华为根生态创新。点击链接,免费领取您的专属云主机
TaurusDB库表时间点极速恢复,大幅缩短数据恢复时间的更多相关文章
- Oracle之表空间基于时间点的恢复
记一次优化过程中:一次误操作,在不影响其他表空间的情况下:采用表空间基于时间点的恢复(TSPITR)方法恢复数据的过程. 1.TSPITR恢复原理 TSPITR目前最方便的方法是使用RMAN进行 ...
- xtrabackup原理,整库,单表,部分备份恢复
物理备份xtrabackup原理 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Pe ...
- 表空间基于时间点的恢复(TSPITR)
环境:RHEL 6.4 + Oracle 11.2.0.4 准备模拟环境 1. 验证表空间的依赖性 2. 确定执行TSPITR后会丢失的对象 3. 自动执行TSPITR Reference 准备模拟环 ...
- PostgreSQL常用操作合辑:时间日期、系统函数、正则表达式、库表导入导出、元数据查询、自定义函数、常用案例
〇.参考地址 1.pg官方文档 http://www.postgres.cn/docs/9.6/index.html 2.腾讯云仓pg文档 https://cloud.tencent.com/docu ...
- mysql库表优化实例
一.SQL优化 1.优化SQL一般步骤 1.1 查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; Com_select:执行SELECT操作的次数,一次查询累加1.其他类似 以下 ...
- 己亥清爽恢复系列之数据文件4篇:DROP表后如何恢复(非闪回技术)
己亥清爽系列说明:清爽系列是作为恢复系列的基础篇,基于FS(File System)文件系统的手工还原恢复,也叫基于用户管理的还原恢复,来自于博客园AskScuti. 实验说明:你不小心Drop掉了一 ...
- oracle数据库误操作把表删除了,怎样恢复
一:表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有:1.从flash back里查询被删除的表 select * from re ...
- oracle数据库误删的表以及表中记录的恢复
oracle数据库误删的表以及表中记录的恢复 一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: --1.从flash bac ...
- SQL Server 数据恢复到指点时间点(完整恢复)
SQL Server 数据恢复到指点时间点(完整恢复) 高文龙关注2人评论944人阅读2017-03-20 12:57:12 SQL Server 数据恢复到指点时间点(完整恢复) 说到数据库恢复,其 ...
- Hive(五)数据类型与库表操作以及中文乱码
一.数据类型 1.基本数据类型 Hive 支持关系型数据中大多数基本数据类型 类型 描述 示例 boolean true/false TRUE tinyint 1字节的有符号整数 -128~127 1 ...
随机推荐
- 开发者故事:基于 KubeSphere LuBan 架构打造下一代云交付平台
前言 在 KubeSphere Marketplace,个人开发者的创意和才能正在逐渐崭露头角.今日,我们荣幸地向大家介绍 Shipper 云交付平台的开发者--凌波,一位云原生领域的资深专家. 凌波 ...
- AI实战篇:Spring AI + 混元 手把手带你实现企业级稳定可部署的AI业务智能体
前言 在之前的内容中,我们详细讲解了Spring AI的基础用法及其底层原理.如果还有小伙伴对此感到困惑,欢迎参考下面这篇文章,深入学习并进一步掌握相关知识:https://www.cnblogs.c ...
- .NET使用OllamaSharp实现大模型推理对话的简单演示
前提条件:请确保你本地已经安装了ollama以及有关本地离线模型.或者已有远程模型环境等.如果没有,请自行部署.如果需要帮助,可以文末获取联系方式咨询.由于部署离线大模型过于简单,在线资料也很多, ...
- Octave 安装教程
Octave 用心写著. Octave为GNU项目下的开源软件.同时它也是一种语言,专注于解决线性计算问题.因为对于矩阵计算的优化,使得其速度远高于循环计算.语法兼容Linux shell. Octa ...
- Octomap的学习
什么是octomap? RGBD SLAM的目的有两个:估计机器人的轨迹,并建立正确的地图.地图有很多种表达方式,比如特征点地图.网格地图.拓扑地图等等.在<一起做>系列中,我们使用的地图 ...
- Value error: 'ascii' codec can't decode byte 0xe6 in position 26: ordinal not in range(128) The traceback for the exception was written to the log file
原因:工作空间中有中文编码问题,导致的运行ros异常 解决办法: 1.解决urdf生成异常问题 urdf文件中不允许有中文,所有当输入中文的时候容易出问题,解决方案: ①在根目录下:/opt/ros/ ...
- 哈希(C语言)
文章目录 1.数据结构--哈希表 1.1哈希表的工作原理 1.2哈希表的代码实现 2.哈希算法 2.1 哈希算法介绍 2.2C语言实现示例 本文介绍一个常用的算法--哈希算法,哈希算法依赖于哈希表来实 ...
- Git仓库操作笔记[Git repositories]
指令操作:Git Bash 重点:远程库和本地库之间操作 首先得在github网站 上创建一个 repository ,才能同步. 命令前提是进入githubLib 下的当前目录. 1.从远程库克隆到 ...
- 看图认识HTML5
教程: https://www.w3.org/TR/html52 https://www.w3cschool.cn/html5/ https://www.runoob.com/html/html5-i ...
- Linux系统压力测试工具(命令行工具)
Linux的命令行压力测试工具在做基准测试时很有用,通过基准测试对了解一个系统所能达到的最大性能指标,这些指标可以作为后续性能比较.优化评估的参考依据. 模拟CPU压力: 可以使用stress命令使C ...