暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

GaussDB数据库 2025-07-04
186

1


背景介绍

增量备份(Pwal Backup ServerPBS)作为数据库容灾体系中的核心组件,可通过持续获取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 LogLSN=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 LogCommonLog池中删除,释放内存空间。

图2  PBS总体架构交互图


3. 管控与Agent协作

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

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

2. Agent激活增量备份

  • 持久化配置到SQLite

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

4. 异常恢复

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

3


PBS工作原理解析

pbs_client包含三个线程:pbs_communicate_clientpbs_readerpbs_sender

  • pbs_communicate_client负责与pbs_server交互数据,进行初始化和正常交互数据。pbs_client初始化时,会激活pbs_senderpbs_reader线程。正常与pbs_server交互数据,会更新RwalMetadata元数据。

  • pbs_reader线程根据Metadata数据查询Rwal,并将Redo Log插入队列,唤醒pbs_sender线程。

  • pbs_sender线程负责拼装获取到的Redo Log,并上传OBS服务器


图3 PBS组件内部组件图

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

图4  Redo日志上传双队列示意图

1pbs_communicate_client通信线程

  • 初始化流程

1.pbs_server建立TCP连接;

2.PBS拼接好发送给PBC的消息体,TypeINIT

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

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

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

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

  • 正常通信流程

1.PBS拼接好发送给pbs_server的消息体,TypeINIT

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

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

4.PBS更新Rwal

(2) pbs_reader日志读取线程和pbs_sender日志发送线程

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

1.pbs_reader根据通信线程pbs_communicate_clientMysqld通信获取的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)机制,能够为客户提供可靠的数据恢复服务,全方位守护企业数据安全与业务连续性。


END




点击下方链接,查看历史文章

【华为云MySQL技术专栏】MySQL 8.0 InnoDB Redo Log持久化流程简析

【华为云MySQL技术专栏】MySQL8.0 InnoDB崩溃恢复流程解析


  戳“阅读原文”,了解更多技术干货


文章转载自GaussDB数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论