ezra-sullivan
发布于 2025-06-12 / 1 阅读
0
0

04 - PostgreSQL 备份工具 - pgBackRest -(1)简介

更新时间:2025 年 6 月

版本:pgbackrest 2.55.1

官方文档:pgBackRest - Reliable PostgreSQL Backup & Restore

Github 地址:pgbackrest/pgbackrest: Reliable PostgreSQL Backup & Restore

简介

pgBackRest 是一款为 PostgreSQL 设计的强大且可靠的备份与恢复工具,旨在解决 PostgreSQL 在大规模部署场景下的备份、恢复、压缩与加密等问题。它虽是开源工具,但一直以企业级特性、高性能和高可用性为核心,为数据库运维人员提供稳定、高效的数据保护方案

特性

并行备份与恢复:支持多线程并发执行,大幅提高大数据量备份和恢复的速度

全量、增量与差异备份:多种备份类型,可以仅备份变更的数据块,节省存储空间和时间

压缩与加密

  • 支持多种压缩算法(如 lz4zstgzip);
  • 可使用 AES-256 加密保护备份数据

远程备份与恢复:支持通过 SSH 将备份存储在远程服务器,简化异地容灾部署

备份保留策略:支持基于时间或数量的自动备份清理策略

恢复验证(Restore Validation):提供 --delta--force 等功能,确保数据在恢复过程中保持一致性

与 PostgreSQL 紧密集成:兼容 WAL 归档、支持 PITR(Point-In-Time Recovery)精确到秒级

s3 等对象存储支持:pgBackRest 存储库可以位于 S3、Azure 和 GCS 兼容的对象存储中,以实现几乎无限的容量和保留

系统架构

PostgreSQL 服务器 → pgBackRest → 备份存储库
                                ├─ 本地存储
                                ├─ 远程存储 (SSH)
                                └─ 云存储 (S3/Azure/GCS)

相关概念

参考:pgBackRest User Guide - RHEL

备份

备份是数据库集群的一致性副本,主要有以下作用:

  • 硬件故障恢复;
  • 执行 PITR(时间点恢复)
  • 启动一个新的 备用节点(standby)

完全备份

  • 备份内容:备份整个数据库集群的完整内容
  • 备份机制:可以单独备份,不依赖于其他备份,数据库集群的第一次备份必须是全量备份
  • 恢复机制:恢复时只需此一份备份即可,不依赖其他备份

差异备份

  • 备份内容:以全量备份为基础,仅备份自上次全量备份之后更改过的文件
  • 备份机制:不可以单独备份,必须在全量备份的基础上进行备份
  • 恢复机制:不能单独恢复,依赖于所基于的那个全量备份,先应用基于的全量备份,再应用差异备份

增量备份

  • 备份内容:以上一次备份(可以是任何类型)为基础,仅复制自上一次备份以来发生变化的文件
  • 备份机制:不可以单独备份,必须在其他备份(可以是任何类型)的基础上进行备份
  • 恢复机制:不能单独恢复,依赖于自上一次全量备份以来的整条备份链,依次应用链中的每一个备份

对比

对比项全量备份差异备份增量备份
备份机制独立执行
首次必须全量备份
基于全量备份生成
不能独立存在
基于任意类型备份生成
不能独立存在
备份速度最慢
(备份全部内容)
中等
(仅备份与上次全量不同的文件)
最快
(只备份和上次有变化的文件)
恢复机制(依赖)独立执行,无依赖需要当前差异 + 所基于的全量备份需要完整的备份链
(全量 + 可选差异 + 所有前置增量)
恢复速度最快中等
(需要合并基础全量 + 当前差异)
最慢
(需逐个重放备份链上所有备份)
存储占用最大中等最小
适用场景- 初始备份
- 定期全量备份
- 容灾策略中的关键点恢复
- 日常定期备份节省空间
- 恢复链不希望过长
- 高频率的细粒度备份
- 空间受限时的高频备份需求

恢复

恢复是指将备份文件复制到目标系统并启动为运行中数据库集群的过程。要正确执行恢复操作,需要备份文件及一个或多个 WAL 段

WAL

WAL(预写式日志)是 PostgreSQL 用于确保已提交更改不丢失的机制。事务按顺序写入 WAL,当这些写入操作刷新到磁盘时,事务即被视为已提交。随后,后台进程会将更改写入主数据库集群文件(也称为堆文件)。若发生崩溃,系统会重放 WAL 日志使数据库恢复一致状态

从概念上讲 WAL 是无限延伸的,但实际上被分割为多个 16MB 的独立文件(称为段)

WAL 段遵循 "0000000100000A1E000000FE" 这样的命名规范:前 8 位十六进制数字表示时间线,后续 16 位数字是逻辑序列号(LSN)

加密

加密是将数据转换为不可识别格式的过程,除非提供正确的密码

pgBackRest 可以根据用户提供的密码对存储库进行加密,从而防止未经授权访问存储库中的数据


评论