PostgreSQL 增量備份詳解以及相關示例

PostgreSQL 沒有類似MySQL 的二進制日誌, 但是有和MySQL 類似的REDO LOG,並且有MySQL 沒有的REDO 歸檔功能。當然REDO 的歸檔已經MariaDB 和Percona-MySQL 已經實現。

那我們就利用PGSQL的REDO 歸檔,也叫WAL來實現增量備份。  




假設我們已經做了一個物理的全備,並且相應的參數都已經設置完畢,比如以下:
      /home/full_backup 保存全備的目錄。
      /home/increment_log 保存增備的目錄。


       進入postgresql.conf 
       開啓WAL.
       wal_level = archive 
       wal_keep_segments=1
       開啓WAL 的歸檔模式.
        archive_mode = on
	archive_command = 'test ! -f /home/increment_log/%f && cp %p /home/increment_log/%f' (歸檔,也就是增量)



那麼關於WAL歸檔日誌要注意的一點是,如果CRASH 掉了,那麼沒有歸檔的XLOG也可能沒有提交到數據文件,所以有可能這部分數據會丟失掉。所以在之後恢復的時候我們要把這部分XLOG拷貝到全備的對應目錄。




恢復方法:
1. 確保沒有任何業務對PG服務進行訪問。(有可能這個時候PG已經CRASH掉了。)
2. 先停掉POSTGRESQL 服務。
3. cd /home/pgsql;
4. mv data data_old
6. cp -rfp /home/full_backup/* /home/pgsql (拷貝全備)
7. cp -rfp data_old/pg_xlog/000* data/pg_xlog/ (這裏是拷貝自從最後一個增量和系統CRASH之間的XLOG到對應的目錄。)
8. cd data
9. vi recovery.conf (添加recovery.conf文件,讓PG認爲這次是在恢復。)
 restore_command='test ! -f  /home/increment_log/%f && cp  /home/increment_log/%f %p'
 recovery_target_timeline = 'latest'
 10. chown -R postgres.postgres recovery.conf
11. 啓動postgresql 服務即可。  





如果正確恢復了,那麼recovery.conf 會自動更名爲recovery.done.


以我的機器爲例,我的版本是9.3,PG_XLOG中看到的BACKUP 信息:
[root@postgresql-instance pg_xlog]# cat 000000010000000000000003.00000028.backup
START WAL LOCATION: 0/3000028 (file 000000010000000000000003)
STOP WAL LOCATION: 0/30000B8 (file 000000010000000000000003)
CHECKPOINT LOCATION: 0/3000028
BACKUP METHOD: pg_start_backup
BACKUP FROM: master
START TIME: 2014-01-07 03:35:02 EST
LABEL: ytt
STOP TIME: 2014-01-07 03:36:27 EST




日誌中會看到恢復如下恢復信息:
< 2014-01-07 05:02:47.361 EST >LOG:  00000: starting archive recovery
< 2014-01-07 05:02:47.361 EST >LOCATION:  StartupXLOG, xlog.c:4983
< 2014-01-07 05:02:47.369 EST >LOG:  00000: redo starts at 0/3000028
< 2014-01-07 05:02:47.369 EST >LOCATION:  StartupXLOG, xlog.c:5531
< 2014-01-07 05:02:47.371 EST >LOG:  00000: consistent recovery state reached at 0/303FC88


發佈了97 篇原創文章 · 獲贊 2 · 訪問量 47萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章