postgresql增量备份系列二 pg_probackup
已经很久没有发文章了,主要是最近工作上的内容都不适合发文章公开。可能往后文章发表也不这么频繁了,不过大家有问题我们可以交流。之前有写过PG增量备份的其他工具使用方法,pg_probackup也是应用比较多的PG备份工具。
一. pg_probackup
pg_probackup
是一个用于管理 PostgreSQL 数据库集群备份与恢复的实用工具,截止2.5.15版本,支持 PostgreSQL 11-16 及以上版本。它能够执行定期备份,并在故障发生时帮助恢复服务器。
pg_probackup实用程序基于pg_arman,它最初由NTT编写,然后由Michael Paquier开发和维护。
作为 PostgreSQL 官方扩展工具之一,pg_probackup
相比其他备份方案具备以下优势:
🔁 多样化增量备份模式
支持三种增量备份方式:
- DELTA 模式:读取整个数据目录,仅复制变更页,减少写入量。
- PAGE 模式:基于 WAL 分析提取变更页,节省空间,但依赖完整归档。
- PTRACK 模式:通过 PostgreSQL 内建的 page tracking 位图追踪变更,速度最快,对系统性能影响最小。
🚀 快速恢复
- 增量恢复(Incremental Restore):跳过未变更的页,提高恢复效率。
- 部分恢复(Partial Restore):可选择仅恢复某个数据库,而非整个集群。
- Catchup 功能:用于让落后的 Standby 节点快速追上主节点。
✅ 验证与一致性检查
- 自动校验(Validation):备份过程中进行数据一致性检查,支持离线验证。
- 实例验证(Verification):通过
checkdb
命令对 PostgreSQL 实例进行完整性验证。
📦 高效的存储与空间管理
- 压缩(Compression):备份数据支持压缩,节省磁盘空间。
- 去重(Deduplication):自动排除未变化的非数据页(如
_vm
、_fsm
)。 - 备份保留策略(Retention Policy):
- 支持基于时间点(recovery window)或保留备份数量。
- 可配置 TTL(生命周期)来控制备份过期。
- 过期备份支持自动合并或删除。
⚙️ 高性能执行与并发支持
- 所有核心操作(如备份、恢复、校验、删除等)均支持多线程并行处理,大幅提升性能。
🌐 远程与灵活备份源支持
- 支持远程 PostgreSQL 实例的备份与恢复,无需在本地操作。
- 可从 Standby 节点 执行备份,减轻主节点负载。
- 可备份 PGDATA 之外的目录(如配置文件、脚本、日志、SQL 文件等)。
📁 集中备份目录与元数据管理
- 使用统一的 Backup Catalog 管理多个 PostgreSQL 实例的备份与 WAL。
- 提供 JSON 或纯文本格式 的备份/归档信息,便于脚本调用和可视化集成。
🛡️ 强一致性保障
所有备份均为 物理在线备份,确保数据一致性。支持两种 WAL 捕获方式:
- ARCHIVE 模式:依赖持续 WAL 归档进行恢复(默认模式)。
- STREAM 模式:通过复制协议实时抓取 WAL,形成自治型(standalone)备份,适用于未启用归档的环境。
撒
pg_probackup 使用的前置要求
限制 | 描述 |
---|---|
支持的 PostgreSQL 版本 | pg_probackup 仅支持 PostgreSQL 9.5 及更高版本。 |
Windows 系统的限制 | Windows 系统不支持远程模式。 |
PostgreSQL 11 的备份要求 | 在 Unix 系统上,对于 PostgreSQL 11,备份只能由启动 PostgreSQL 服务器的同一个操作系统用户执行。例如,如果 PostgreSQL 由用户 postgres 启动,则备份命令也必须由用户 postgres 执行。在使用 SSH 远程模式时,必须设置 --remote-user 选项为 postgres 。 |
PostgreSQL 9.5 的备份要求 | 对于 PostgreSQL 9.5,函数 pg_create_restore_point(text) 和 pg_switch_xlog() 只有当备份角色是超级用户时才能执行。因此,使用非超级用户角色备份流量较少的集群时,备份可能会比使用超级用户角色时更慢。 |
备份与恢复服务器的兼容性 | 从 PostgreSQL 服务器中获取的备份与被恢复的服务器必须在 block_size 和 wal_block_size 参数上兼容,并且必须具有相同的主版本号。根据集群配置,PostgreSQL 本身可能会施加额外的限制,如 CPU 架构或 libc/icu 版本等。 |
安装部署
通过github下载其pg_probackup源码包
执行源码编译安装。需要可读取pg_config指令。
su - postgres ## 使用postgres用户 避免其他用户安装破环目录权限问题tar -zxvf pg_probackup-2.5.15.tar.gz
cd pg_probackup-2.5.15/
make USE_PGXS=1 PG_CONFIG=/home/postgres/pg/bin/pg_config top_srcdir=/home/postgres/postgresql-16.3
make USE_PGXS=1 PG_CONFIG=/home/postgres/pg/bin/pg_config top_srcdir=/home/postgres/postgresql-16.3 install ## top_srcdir 参数指定得是YODB的源码包位置
## USE_PGXS=1 使用 PGXS 外部扩展构建模式
创建初始化目录适用独立得目录为其备份
#创建备份目录
mkdir -p /home/postgres/backup
##初始化备份目录(pg_probackup会自动创建对应得backups、wal的分类