# pgbackrest **Repository Path**: w_duo/pgbackrest ## Basic Information - **Project Name**: pgbackrest - **Description**: pgbackrest分支,支持 archive_mode=always 模式 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-08-20 - **Last Updated**: 2026-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pgBackRest Reliable PostgreSQL Backup & Restore ## pgBackRest 分支,可以支持 `archive_mode=always ` 模式,备份、归档,支持归档校验 ### 安装 ```bash su - postgres cd /home/postgres/soft/pgbackrest-2.59.0/ meson setup build \ --prefix=/home/postgres/app/postgresql \ --buildtype=release # 然后编译: ninja -C build -j$(nproc) # 安装 ninja -C build install which pgbackrest ``` ### 修改归档配置 ```bash alter SYSTEM set archive_mode=always; alter SYSTEM set archive_command = '/home/postgres/app/postgresql/bin/pgbackrest --stanza=cluster1 archive-push %p'; select pg_reload_conf(); ``` 这里 archive_mode 当然也可以设置成 on ### 查看归档设置 ```bash psql -c 'show archive_mode;' psql -c 'show archive_command;' ``` ### 测试归档 ```bash psql -c 'select pg_switch_wal();' or /home/postgres/app/postgresql/bin/pgbackrest --stanza=cluster1 check ``` ### 日志输出展示: 主库: ```bash INFO: pushed WAL file '00000001000000000000002D' to the archive asynchronously ``` 备库: ```bash INFO: repo-0 has already archived 00000001000000000000002D and ignore this request ``` ### 场景: | 场景 | archive_mode=on | archive_mode=always | | ------------------- | ------------------------------- | ------------------------ | | 主备切换 / failover | 新 timeline 归档断档,PITR 中断 | 归档连续,PITR 不受影响 | | 主备各自独立 repo | 备库基本只读不归档 | 备库独立拥有一份完整归档 | | 主库异常 | 归档只能靠主库 | 备库有独立归档可兜底 | **1. failover 后新 timeline 的 WAL 也能归档(最大好处)** `archive_mode=on`:只在**主库正常写 WAL 时归档**;一旦发生 failover、恢复(recovery)或主备切换,产生的新 timeline WAL 不会被归档。 `archive_mode=always`:**即使在主备切换后、recovery 状态下产生的新 timeline WAL**,**也会执行** archive_command。 如果你依赖 WAL 做 PITR(时间点恢复),切换主备后 on 模式下新 timeline 的 WAL 断档,PITR 无法继续;always 则归档链完整,切换后照样能恢复到任意时间点。 **2. 主备复制中断时,备库可以从归档补齐** 主备之间的 WAL 流式复制靠的是同一批 WAL 段,若网络中断、备库暂时连不上主库: on 模式下备库接收不到,落后,且没有归档兜底。 always 下主库照常归档所有 WAL,备库事后可从**归档**补齐落后的 WAL,减少数据丢失窗口。 **3. 主备都能成为归档来源,多一层冗余** 备库也会执行归档,主备任一方都能把 WAL 送进仓库。 结合你的主备各自 repo 部署,等于每个节点都有自己的一份归档,互不依赖,归档可用性更高。 **4. 双主/切换场景更稳** 某些高可用方案(repmgr、Patroni 切换)下,新主会生成新 timeline。always 确保切换瞬间产生的 WAL 也立即归档,避免"切换成功但归档丢了一小段"。