已經很久沒有發文章了,主要是最近工作上的內容都不適合發文章公開。可能往后文章發表也不這么頻繁了,不過大家有問題我們可以交流。之前有寫過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的分類