PostgreSQL 全量 增量 歸檔 備份工具 pg_rman介紹與使用(轉載)
阿新 • • 發佈:2020-12-01
1.介紹
PostgreSQL已經支援類似的Oracle的rman的備份工具的功能,支援全量,增量,歸檔三種備份模式,支援壓縮,支援備份集的管理等。 pg_rman使用的是pg_start_backup(),copy,pg_stop_backup()的備份模式,pg_rman跑的不是流複製協議,而是檔案拷貝,所以pg_rman必須和資料庫節點跑在一起。如果在待機節點跑pg_rman,pg_rman則需要通過網路連線到主節點執行pg_start_backup和pg_stop_backup.pg_rman的用法非常簡單,支援以下幾種執行模式。 pg_rman常用命令- pg_rman [ OPTIONS ] { init |
- backup |
- restore |
- show [ DATE | detail ] |
- validate [ DATE ] |
- delete DATE |
- purge }
- * init:初始化備份目錄。
- * backup:進行線上備份。
- -b, --backup-mode=MODE full, incremental, or archive
- -s, --with-serverlog also backup server log files
-
-Z, --compress-data compress data backup with zlib
- -C, --smooth-checkpoint do smooth checkpoint before backup
- -F, --full-backup-on-error switch to full backup mode if pg_rman cannot find validate full backup on current timeline NOTE: this option is only used in--backup-mode=incremental or archive.
-
--keep-data-generations=NUM keep NUM generations of full data backup --keep-data-days=NUM keep enough data backup to recover to N days ago--keep-arclog-files=NUM keep NUM of archived WAL
- --keep-arclog-days=DAY keep archived WAL modified in DAY days
- --keep-srvlog-files=NUM keep NUM of serverlogs
- --keep-srvlog-days=DAY keep serverlog modified in DAY days
- --standby-host=HOSTNAME standby host when taking backup from standby
- --standby-port=PORT standby port when taking backup from standby
- * restore:恢復。
- --recovery-target-time time stamp up to which recovery will proceed --recovery-target-xid transaction ID up to which recovery will proceed --recovery-target-inclusive whether we stop just after the recovery target --recovery-target-timeline recovering into a particular timeline --hard-copy copying archivelog not symbolic link
- * show:顯示備份歷史記錄 詳細資訊選項顯示每個備份的附加資訊。
- * validate:驗證備份檔案。未經驗證的備份不能用於還原和增量備份。
- * delete:刪除備份檔案。
- * purge:從備份目錄中刪除已刪除的備份
2.使用
(1)初始化備份目錄pg_rman init -B <a backup catalog path>
建議在初始化備份目錄之前進行設定log_directory,archive_mode並archive_command在postgresql.conf中進行設定。如果變數已初始化,則pg_rman可以將配置檔案調整為該設定。在這種情況下,您必須為PostgreSQL指定資料庫叢集路徑。請在PGDATA環境變數或-D/ --pgdata選項中指定。
(2)備份模式- # 完全備份:備份整個資料庫叢集。
- pg_rman backup -b full
- # 增量備份:僅備份使用相同時間軸在上次驗證備份後修改的檔案或頁面。
- pg_rman backup -b incremental
- # 存檔WAL備份:僅備份存檔WAL檔案。
- pg_rman backup -b archive
- # 備份集校驗(建議在備份後儘快驗證備份檔案。未驗證的備份不能用於還原或增量備份)
- pg_rman validate
pg_rman show
pg_rman show detail
(顯示更多詳細資訊)
相關引數含義:- * StartTime:備份開始時的時間戳
- * EndTime:備份結束時的時間戳
- * Mode:備份模式。
- * FULL:完全備份
- * INCR:增量備份
- * ARCH:歸檔WAL備份
- * Data:讀取資料檔案的大小
- * ArcLog:讀取存檔WAL檔案的大小
- * SrvLog:讀取伺服器日誌檔案的大小
- * Total:備份大小(=書面大小)
- * Compressed:備份是否已壓縮
- * TLI / CurTLI:PostgreSQL的時間軸ID
- * ParentTLI:PostgreSQL的前時間軸ID
- * Status:備份狀態。可能的值是:
- * OK:備份已成功完成並經過驗證。
- * DONE:備份成功完成。
- * RUNNING:備份仍在執行。
- * DELETING:正在刪除備份。
- * DELETED:備份已被刪除。
- * ERROR:備份期間發生一些錯誤。
- *CORRUPT:備份不可用,因為它沒有通過驗證。
pg_rman show '2019-03-20 12:10:01'
指定日期可以檢視備份的詳細資訊
(4)刪除備份集 按指定時間從catalog刪除備份集 例如我只需要我的備份集能恢復到2017-08-30 17:27:49,在這個時間點以前,不需要用來恢復到這個時間點的備份全刪掉。但是會保留一次全備份。加上-f會強制刪除pg_rman delete "2017-08-30 17:27:49"
根據備份策略來刪除備份集
修改配置檔案--- pg_rman.ini KEEP_DATA_GENERATIONS = 3-- 備份集冗餘度是3 KEEP_DATA_DAYS = 10 -- 備份集保留日期是10d (5)清除備份集(刪除已刪除的備份) 雖然delete命令從檔案系統中刪除了實際資料,但是仍然有一些已刪除備份的目錄資訊,需要執行purge命令來刪除。pg_rman purge
(6)備份恢復
pg_rman將備份資料還原到目標資料庫叢集路徑。
應該在恢復之前停止pg。此外,不要刪除原始資料庫叢集,因為pg_rman必須從中檢查時間軸ID或資料校驗和狀態。Restore命令將儲存未歸檔的事務日誌並刪除所有資料庫檔案。您可以重試恢復,直到進行新備份。恢復檔案後,pg_rman在中建立$PGDATA/recovery.conf。conf檔案包含要恢復的引數,可以根據需要修改該檔案。
建議在恢復成功後儘快進行完整備份。
如果--recovery-target-timeline未指定,則控制檔案($PGDATA/global/pg_control)中的最後一個檢查點的TimeLineID 將是還原目標。如果pg_control不存在,則還原使用的完整備份中的TimeLineID將是還原目標。
指定時--recovery-target-time,請確保指定大於(或等於)要用作基礎的完整備份的EndTime的時間戳。
恢復時,需要注意,你可以選擇原地恢復(覆蓋式),或者使用新的$PGDATA作為恢復目標。
但是請注意,不管是哪種恢復方式,如果在本機恢復的話,pg_rman可能會覆蓋原有的資料檔案,arch, pg_xlog目錄中的檔案,所以,如果你要保留原資料,建議先將原資料目錄重新命名。
注:進行備份恢復之後,不能進行全量備份,需要進行增量備份
- 原地恢復
- 使用新的$PGDATA全恢復
- # 需要刪除$PGDATA下的檔案
- pg_rman restore
- # 必須要先停止postgresql 不然會報錯ERROR: PostgreSQL server is running
- # 恢復到指定時間戳:
- pg_rman restore--recovery-target-time "2019-02-15 13:56:45" --hard-copy
- # 根據xid 來恢復:
- pg_rman restore--recovery-target-xid 1821
select pg_wal_replay_resume();
(7)pg_rman.ini
引數配置檔案 設定留存期- COMPRESS_DATA=YES
- KEEP_ARCLOG_FILES=7
- KEEP_ARCLOG_DAYS=7
- KEEP_DATA_GENERATIONS=3
- KEEP_DATA_DAYS=7
- KEEP_SRVLOG_FILES=7
- KEEP_SRVLOG_DAYS=7