写点什么

TaurusDB 库表时间点极速恢复,大幅缩短数据恢复时间

  • 2024-12-18
    广东
  • 本文字数:1888 字

    阅读完需:约 6 分钟

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

 

本文分享自华为云社区《【华为云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、欧拉等各项根技术的开发资源及工具,致力于为每位开发者提供一台云主机、一套开发工具及云上存储空间,让开发者基于华为根生态创新。点击链接,免费领取您的专属云主机


点击关注,第一时间了解华为云新鲜技术~

用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
TaurusDB库表时间点极速恢复,大幅缩短数据恢复时间_数据库_华为云开发者联盟_InfoQ写作社区