写点什么

【华为云 MySQL 技术专栏】TaurusDB 增备功能介绍

  • 2025-07-16
    广东
  • 本文字数:1933 字

    阅读完需:约 6 分钟

【华为云MySQL技术专栏】TaurusDB增备功能介绍

1、背景介绍

 

增量备份(Pwal Backup Server,PBS)作为数据库容灾体系中的核心组件,可通过持续获取 Redo log 来实现按时间点恢复(PITR:Point-in-Time Recovery )。

TaurusDB 通过全量备份和增量备份,构成了完整的备份策略链,满足 ACID 原则中的持久性要求,能够实现 RTO<15 分钟、RPO≈0 的金融级灾备标准。

本文将重点介绍 TaurusDB 的增量备份功能。

 

2、原理介绍

 

先解释一些 taurusDB 中增备相关的概念:

增量备份(PBS)依赖于 LSN。PBS 会首先从 OBS 读取最近全量备份的“结束 LSN”(如 LSN=5000)。数据库会从该 LSN 开始持续上传新生成的 Redo Log(LSN=5001, 5002,...),直到备份完成后,再进一步推进 IncreBackupLSN,从而防止关键日志被过早清理,确保增量备份数据的完整性与可用性。

 

1. 核心功能​​

PBS 的核心任务是:

  • ​​基于最近一次全量备份的结束 LSN​​,持续上传 Redo 日志到 OBS,确保数据可恢复到任意时间点。

  • ​​依赖全量备份​​:如果没有全量备份,PBS 无法启动。

 

​​ 2. 数据流转​​

图 1. 数据流转示意图

数据流转如图 1 所示:

1).MySQL 写入 Redo Log​​

  • MySQL 将事务日志(Redo Log)写入 ​​CommonLog 内存池​​。

  • 日志在 ​​上传到 OBS 之前不会删除​​。

​​ 2).PBS 获取并上传 Redo Log​​

  • PBS 进程启动后,从 OBS 读取 ​​最近全量备份的结束 LSN​​(或上一次增量备份的结束 LSN)。

  • 与 MySQL 交互,获取 Redo Log 的 ​​元数据​​,并从 CommonLog 提取对应日志。

  • 上传至 OBS,并推进 ​​TruncateLSN​​(标记已上传的日志可被清理)。

​​ 3).日志清理​​

已上传的 Redo Log 从 CommonLog 池中删除,释放内存空间。

图 2. PBS 总体架构交互图

 

​​ 3. 管控与 Agent 协作​​

管控和 Agent 的组件角色如图 2 所示:

1)全量备份完成后​​,管控向 OBS 写入 ​​备份结束 LSN​​(即增量备份起点)。

​​ 2)Agent 激活增量备份​​:

  • 持久化配置到 SQLite。

  • 初始化 PBS 环境,启动定时任务(监控 PBS 进程状态)。

 

​​ 4. 异常恢复​​

​​ PBS 重启时​​,会从 OBS 读取 ​​上一次增量备份的结束 LSN​​,继续备份,确保连续性。

 

3、PBS 工作原理解析

 

Pbs_client 包含三个线程:Pbs_communicate_client、Pbs_reader、Pbs_sender。

  • Pbs_communicate_client 负责与 Pbs_server 交互数据,进行初始化和正常交互数据。Pbs_client 初始化时,会激活 Pbs_sender 和 Pbs_reader 线程。正常与 Pbs_server 交互数据,会更新 Rwal 的 Metadata 元数据。

  • Pbs_reader 线程根据 Metadata 数据查询 Rwal,并将 Redo 日志插入队列,唤醒 Pbs_sender 线程。

  • Pbs_sender 线程负责拼装获取到的 Redo 日志,并上传 OBS 服务器。

图 3. PBS 组件内部组件图

 

图 4 是具体的线程交互图,具体实现如下:

图 4. PBS 线程交互图

(1)Pbs_communicate_client 通信线程:

初始化流程:

1.与 pbs_server 建立 TCP 连接;

2.PBS 拼接好发送给 PBC 的消息体,Type 为 INIT;

3.PBC 接受解析消息,获取并更新 Truncate_backup_lsn;

4.PBC 获取 Pwal 的快照和 Pwal 的 Offset,拼装消息返回给 PBS;

5.PBC 获取数据,更新 Incre_start_lsn,创建线程 pbs_log_reader;

6.PBS 打开 Rwal 并设置读取 Rwal 的起点,创建 pbs_sender 和 pbs_reader 线程。

正常通信流程:

1.PBS 拼接好发送给 pbs_server 的消息体,Type 为 INIT;

2.PBC 接受解析消息,获取并更新 Truncate_backup_lsn;

3.PBC 获取 Pwal 的快照和 Rwal 的 Offset,拼装消息返回给 PBS;

4.PBS 更新 Rwal。

(2) Pbs_reader 日志读取线程 和 Pbs_sender 日志发送线程

日志读取线程和日志发送线程使用了经典的生产者消费者模式:

1).由 pbs_reader 根据通信线程 pbs_communicate_client 与 Mysqld 通信获取的 Redo Log 数据的句柄,从 CommonLog 读取 Redo Log,并塞入队列中等待 pbs_sender 消费,同时更新 End_lsn 用于继续读取 Redo Log。pbs_sender 从队列中获取 Redo Log 后,依据设置的上传策略来上传 OBS。

2).在读取和发送线程的交互中,使用了两个队列的设计,加快了 Redo Log 上传,实际上传时,会把若干 Redo Log 合并成一个大段的 BUFFER 进行上传,来提高上传效率。

图 5. Redo 日志上传双队列示意图

对同一个 Buffer,读取 Redo Log 和上传 Buffer 是不能同时进行的。这里有两个队列可以规避这种情况:

Buffer_1 上传数据期间,Sender 线程会向 Buffer_2 中写入数据。当 Buffer_2 达到发送条件时,且 Buffer_1 上传成功,则进行交替,即开始上传 Buffer_2 数据,向 Buffer_1 中写入数据。该功能实现了上传和写入的并行,因此当数据流较大时,上传不会因为要等待写入完成而受到阻塞。

 

4、总结

数据备份与恢复是数据库系统的生命线。TaurusDB 通过高效的全量备份(Full Backup)与增量备份(Incremental Backup)机制,能够为客户提供可靠的数据恢复服务,全方位守护企业数据安全与业务连续性。

关注“华为云开发者联盟”,了解更多技术动态。

 

用户头像

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

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

评论

发布
暂无评论
【华为云MySQL技术专栏】TaurusDB增备功能介绍_华为云开发者联盟_InfoQ写作社区