【华为云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)机制,能够为客户提供可靠的数据恢复服务,全方位守护企业数据安全与业务连续性。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值