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

举报
GaussDB 数据库 发表于 2025/07/04 16:42:55 2025/07/04
【摘要】 1.背景介绍增量备份(Pwal Backup Server,PBS)作为数据库容灾体系中的核心组件,可通过持续获取Redo log来实现按时间点恢复(PITR:Point-in-Time Recovery )。TaurusDB通过全量备份和增量备份,构成了完整的备份策略链,满足ACID原则中的持久性要求,能够实现RTO<15分钟、RPO≈0的金融级灾备标准。本文将重点介绍TaurusDB的增...

1.背景介绍

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

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

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

2.原理介绍

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

1.png

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

1)核心功能

PBS的核心任务是:

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

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

2)数据流转

2.png

图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池中删除,释放内存空间。

3.png

图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服务器

4.png

图3 PBS组件内部组件图

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

5.png

图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进行上传,来提高上传效率。

6.png

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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