【华为云MySQL技术专栏】TaurusDB库表时间点极速恢复

举报
GaussDB 数据库 发表于 2024/12/13 09:11:29 2024/12/13
【摘要】 1.背景介绍云上客户经常出现误删表、删库等操作。针对这类问题,业界普遍提供库表级恢复方案。首先,在后台将选中时间点的全量数据和增量数据恢复至一个临时实例,然后,自动导出用户需要恢复的表,再将这些表恢复至原实例,以此降低对原实例的影响。然而,为了确保数据完整性,这一过程通常涉及整个实例的完整恢复,较长的恢复时间导致客户对该方案不甚满意。尤其是当恢复的表数据量远小于整个实例时,如恢复3T实例中仅...

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

启动MysqlDInnoDB层根据表tablespace id,不在列表的显示为DB_CANNOT_OPEN_FILE,回放增量日志时,跳过非恢复表日志

利用mydumpermyloader导出导入表

4. 应用

公有云上的用户使用的2T实例恢复为例一张大小为12M进行测试,优化后整体耗时对比如图5所示

图5 表级恢复优化前后耗时对比

从图中数据对比可以看出,优化后恢复的数据量从TB降低到MB,整体恢复时间仅为优化前所需时间的21%。

此外,创建实例阶段,通过并行化处理各个子步骤,降低了所需时间。在表导入导出阶段,针对开源mydumpermyloader工具,通过调整相应的策略,显著提升了数据恢复性能,详见https://bbs.huaweicloud.com/blogs/433475

5. 总结

TaurusDB凭借库表时间速恢复特性,大幅减少了恢复所需的数据量。经过多组实验对比,对于大实例下仅需恢复几张表数据的情况,有显著优化效果。尤其针对游戏业务等需要频繁回档的场景,将大幅度缩短因数据恢复导致的停服时间。后续我们将逐步在公有云上开放此特性,以惠及更多用户。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。