1. 程式人生 > 實用技巧 >PostgreSQL 全量 增量 歸檔 備份工具 pg_rman介紹與使用(轉載)

PostgreSQL 全量 增量 歸檔 備份工具 pg_rman介紹與使用(轉載)

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常用命令
  1. pg_rman [ OPTIONS ] { init |
  2. backup |
  3. restore |
  4. show [ DATE | detail ] |
  5. validate [ DATE ] |
  6. delete DATE |
  7. purge }
  8. * init:初始化備份目錄。
  9. * backup:進行線上備份。
  10. -b, --backup-mode=MODE full, incremental, or archive
  11. -s, --with-serverlog also backup server log files
  12. -Z, --compress-data compress data backup with zlib
  13. -C, --smooth-checkpoint do smooth checkpoint before backup
  14. -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.
  15. --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
  16. --keep-arclog-days=DAY keep archived WAL modified in DAY days
  17. --keep-srvlog-files=NUM keep NUM of serverlogs
  18. --keep-srvlog-days=DAY keep serverlog modified in DAY days
  19. --standby-host=HOSTNAME standby host when taking backup from standby
  20. --standby-port=PORT standby port when taking backup from standby
  21. * restore:恢復。
  22. --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
  23. * show:顯示備份歷史記錄 詳細資訊選項顯示每個備份的附加資訊。
  24. * validate:驗證備份檔案。未經驗證的備份不能用於還原和增量備份。
  25. * delete:刪除備份檔案。
  26. * 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)備份模式
  1. # 完全備份:備份整個資料庫叢集。
  2. pg_rman backup -b full
  3. # 增量備份:僅備份使用相同時間軸在上次驗證備份後修改的檔案或頁面。
  4. pg_rman backup -b incremental
  5. # 存檔WAL備份:僅備份存檔WAL檔案。
  6. pg_rman backup -b archive
  7. # 備份集校驗(建議在備份後儘快驗證備份檔案。未驗證的備份不能用於還原或增量備份)
  8. pg_rman validate
(3)檢視備份集
pg_rman show
pg_rman show detail
(顯示更多詳細資訊) 相關引數含義:
  1. * StartTime:備份開始時的時間戳
  2. * EndTime:備份結束時的時間戳
  3. * Mode:備份模式。
  4. * FULL:完全備份
  5. * INCR:增量備份
  6. * ARCH:歸檔WAL備份
  7. * Data:讀取資料檔案的大小
  8. * ArcLog:讀取存檔WAL檔案的大小
  9. * SrvLog:讀取伺服器日誌檔案的大小
  10. * Total:備份大小(=書面大小)
  11. * Compressed:備份是否已壓縮
  12. * TLI / CurTLI:PostgreSQL的時間軸ID
  13. * ParentTLI:PostgreSQL的前時間軸ID
  14. * Status:備份狀態。可能的值是:
  15. * OK:備份已成功完成並經過驗證。
  16. * DONE:備份成功完成。
  17. * RUNNING:備份仍在執行。
  18. * DELETING:正在刪除備份。
  19. * DELETED:備份已被刪除。
  20. * ERROR:備份期間發生一些錯誤。
  21. *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全恢復
  1. # 需要刪除$PGDATA下的檔案
  2. pg_rman restore
  3. # 必須要先停止postgresql 不然會報錯ERROR: PostgreSQL server is running
  4. # 恢復到指定時間戳:
  5. pg_rman restore--recovery-target-time "2019-02-15 13:56:45" --hard-copy
  6. # 根據xid 來恢復:
  7. pg_rman restore--recovery-target-xid 1821
恢復之後,重啟資料庫:會出現以下內容: 此時資料庫進入只讀狀態。 需要執行以下命令才能繼續
select pg_wal_replay_resume();
(7)pg_rman.ini 引數配置檔案 設定留存期
  1. COMPRESS_DATA=YES
  2. KEEP_ARCLOG_FILES=7
  3. KEEP_ARCLOG_DAYS=7
  4. KEEP_DATA_GENERATIONS=3
  5. KEEP_DATA_DAYS=7
  6. KEEP_SRVLOG_FILES=7
  7. KEEP_SRVLOG_DAYS=7
轉載自:https://blog.csdn.net/qq_35260875/article/details/106093958