環境準備與前置檢查
系統環境確認
# 查看發行版本詳細資訊
cat /etc/os-release
# 查看 CPU 架構 (x86_64 還是 arch64)
uname -mPostgreSQL資料路徑
執行以下指令來查找 PostgreSQL 主程序的詳細資訊,並找出其資料目錄 (Data Directory) 的真實路徑
- 指令:
# 如果資料庫正在執行中,這是最準確的方法
ps -ef | grep postgres | grep -v grep-
範例輸出:
/usr/pgsql-14/bin/postgres -D /var/lib/pgsql/14/data -
關鍵看點: 請在輸出中尋找
-D參數後面的路徑。在此範例中,真實資料路徑為/var/lib/pgsql/14/data。此路徑在後續設定pgbackrest.conf時至關重要。
操作畫面

- OS: Ubuntu 24.04 LTS (Noble Numbat)
- DB: PostgreSQL 16.9
- 相關路徑 :
- 設定檔路徑:
/etc/postgresql/16/main/postgresql.conf - 真實資料路徑:
/var/lib/postgresql/16/main - 服務名稱:
postgresql(或postgresql@16-main)
- 設定檔路徑:
pgBackRest 安裝與基礎設定
安裝 pgbackrest 並建立一個用來存放備份檔的「倉庫 (Repository)」。
安裝 pgBackRest 套件
PostgreSQL 的官方 PGDG APT 儲存庫已包含 pgBackRest 套件,安裝過程非常直接。
sudo apt update
sudo apt install pgbackrest -y建立與設定備份儲存庫 (Repository)
備份儲存庫是 pgBackRest 存放所有備份檔案與 WAL 歸檔的目錄。我們需要手動建立它,並設定正確的權限。
建立備份儲存庫
/var/lib/pgbackrest 資料夾會自動被建立,並將權限交給 postgres 使用者(因為資料庫是的執行身分)。
sudo mkdir -p /var/lib/pgbackrest
sudo chown postgres:postgres /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest操作畫面

設定 pgbackrest.conf
1. 編輯設定檔 開啟設定檔。
sudo vim /etc/pgbackrest/pgbackrest.conf2. 修改pgbackrest.conf
根據 ps -ef | grep postgres | grep -v grep 結果,將路徑填入 pg1-path 。
將 Stanza (備份設定檔名) 取名為 cg_test_prodcut ,關於 Stanza 的命名,官方文件的確建議採用具有描述性且能反映用途的名稱,通常建議使用 [專案代碼]_[環境]_[用途] 的組合。以下修改為最低需求,詳細配置參考pgBackRest參數設定。
[global]
# 指定備份倉庫路徑
repo1-path=/var/lib/pgbackrest
# 設定保留策略:保留最近 2 份全備份 (測試用,正式環境通常設 7-14)
repo1-retention-full=2
# 設定日誌級別
log-level-console=info
log-level-file=detail
# 啟用並行處理 (加速備份/還原)
process-max=2
[cg_test_prodcut]
# 資料庫真實路徑 (來自 ps -ef 結果)
pg1-path=/var/lib/postgresql/16/main3. 修正設定檔權限 為了安全,這個檔案應該只有 postgres 能讀寫。
sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf設定 PostgreSQL 開啟歸檔模式
這一步是讓 PostgreSQL 開始將其產生的 WAL 日誌傳送給 pgBackRest 進行歸檔管理,這是實現 PITR 的必要條件。
1. 編輯 PostgreSQL 設定檔
sudo vim /etc/postgresql/16/main/postgresql.conf2. 修改以下參數
請利用搜尋功能 找到這些參數並修改。如果前面有 # 註解符號,請拿掉。詳細說明請參考WAL相關參數。
# --- 修改內容 ---
# 1. 確保 WAL 級別是 replica (通常 16 版預設就是 replica,確認一下即可)
wal_level = replica
# 2. 開啟歸檔模式
archive_mode = on
# 3. 設定歸檔指令 (注意 stanza 名稱要跟上面一致:cg_test_prodcut)
archive_command = 'pgbackrest --stanza=cg_test_prodcut archive-push %p'雖然上述設定能讓系統運作,但必須考慮極端情況:如果備份儲存庫發生問題,
archive_command可能會持續失敗,導致pg_wal目錄下的 WAL 檔案堆積,最終塞滿磁碟並導致資料庫崩潰。 為此,pgBackRest 提供了一個關鍵的安全閥:archive-push-queue-max參數。此參數決定在危機中,優先考慮保持資料庫在線(透過丟棄 WAL 並中斷備份鏈),還是確保備份完整性(冒著磁碟滿載導致資料庫崩潰的風險)?對於大多數生產系統,優先考慮可用性是正確的營運決策。
3. 重啟 PostgreSQL 使設定生效
sudo systemctl restart postgresql初始化 Stanza 並驗證組態
現在兩邊的設定都已完成,我們需要執行最後的「握手」程序來初始化備份系統並驗證其連通性。
1. 切換身分到 postgres 接下來的操作都建議用 postgres 身分進行,避免權限問題。
sudo -u postgres -i2. 建立 Stanza (初始化) 這會建立必要的目錄結構。
pgbackrest --stanza=cg_test_prodcut stanza-create3. 檢查設定 (Check) 這是一個自我檢測指令,它會測試「能否寫入備份區」以及「能否讀取資料庫」。
pgbackrest --stanza=cg_test_prodcut check當您在輸出結尾看到 command end: completed successfully 時,才代表您的基礎設定已成功完成。至此,一個基礎的備份系統已部署完成並通過驗證。