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_old6. cp -rfp /home/full_backup/* /home/pgsql 拷貝全備)7. cp -rfp data_old/pg_xlog/000* data/pg_xlog/ 這裡是拷貝自從最後一個增量和系統CRASH之間的XLOG到對應的目錄。)8. cd data9. 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.conf11. 啟動postgresql 服務即可。
如果正確恢複了,那麼recovery.conf 會自動更名為recovery.done.
以我的機器為例,我的版本是9.3,PG_XLOG中看到的BACKUP 資訊:
[root@postgresql-instance pg_xlog]# cat 000000010000000000000003.00000028.backupSTART WAL LOCATION: 0/3000028 (file 000000010000000000000003)STOP WAL LOCATION: 0/30000B8 (file 000000010000000000000003)CHECKPOINT LOCATION: 0/3000028BACKUP METHOD: pg_start_backupBACKUP FROM: masterSTART TIME: 2014-01-07 03:35:02 ESTLABEL: yttSTOP 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
本文出自 “上帝,咱們不見不散!” 部落格,請務必保留此出處http://yueliangdao0608.blog.51cto.com/397025/1349537