在做備份還原測試的時候,需要重複執行灌資料、備份、刪資料、還原、確認資料的動作,非常耗時,使用腳本能夠省下大量的時間。

成果

執行過程

結果:test_result_report.txt

使用方法

1. 設定連線

在專案目錄下編輯 config.json,把 hostuserpassword 改成實際 SSH 連線資訊,存檔。


2. 安裝依賴

在專案目錄開終端機,執行:

# 若有虛擬環境,先啟動(建議)
.\venv\Scripts\Activate.ps1
 
# 安裝依賴
pip install -r requirements.txt

3. 執行腳本

python pg_backup_restore_test.py

腳本會讀取 config.json 的連線設定,接著會依序跑 1GB、3GB、5GB、9GB 的測試。


可用參數(pg_backup_restore_test.py

執行時可以加的參數:

  • --host, -H
    • 預設:127.0.0.1
    • 用途:SSH 連線主機名稱或 IP。
  • --user, -u
    • 預設:postgres
    • 用途:SSH 使用者名稱。
  • --password, -p
    • 預設:空字串(""
    • 用途:SSH 密碼(同時也當預設 sudo 密碼用)。
  • --key-file, -k
    • 預設:None
    • 用途:SSH 私鑰檔路徑(使用金鑰認證時用;有填就不會用 --password)。
  • --port
    • 預設:22
    • 用途:SSH 連線埠。
  • --interactive, -i
    • 預設:不啟用(False)
    • 用途:啟用互動模式,執行時用問答方式輸入 host/user/password/key-file,會忽略你在命令列與 config.json 裡給的值
  • --auto-start, -a
    • 預設:不啟用(False)
    • 用途:略過「是否繼續? (y/n)」的確認,直接開始全部測試。
  • --sizes, -s
    • 預設:None(表示用內建的 1GB/3GB/5GB/9GB 測試組合)
    • 用途:指定要測試的資料量,例如:-s 1GB,3GB,5GB-s 500MB,2GB
  • --process-max
    • 預設:None 若為None,則由 pgbackrest.conf中設定控制。
    • 用途:傳給 pgbackrest--process-max,控制備份時的最大並行進程數(例如填 4)。
  • --archive-timeout
    • 預設:None
    • 用途:傳給 pgbackrest--archive-timeout(秒),例如 300 代表 5 分鐘。
  • --config
    • 預設:config.json
    • 用途:指定要讀取的連線設定檔路徑;如果該檔存在,會覆蓋掉對應的 --host/--user/--password/--port/--process-max/--archive-timeout

問題與解決方法

階段遇到的問題 (Error/Issue)原因分析解決方法
備份Error 082: Archive Timeout大量資料寫入時,WAL 歸檔速度跟不上寫入速度,導致超時 。1. 執行 CHECKPOINT;


2. 增加 --archive-timeout=300 設定 。

3. 配合--archive-timeout修改archive-push-queue-max
備份CPU 負載過高 (峰值 397%)開啟並行處理與數據壓縮,導致 4 核心 CPU 滿載。1. 降低 --process-max 數量。


2. 調低 --compress-level 壓縮等級。
還原Read-only transaction還原後資料庫處於待命 (Standby) 或暫停模式,無法寫入。執行 SELECT pg_wal_replay_resume();pg_promote()
還原Error 037: Path/Permissionpg1-path 定義不全或權限不足 。確保以 postgres 身分操作,並使用絕對路徑 。