開源軟件pg_lightool,實現了基於wal日誌的塊恢復。詳情參見博客:https://my.oschina.net/lcc1990/blog/1931485。因爲wal日誌中FPW的不肯定性,它不能做爲一個數據庫恢復的解決方案。目前對pg_lightool的代碼作了升級,它能夠基於一個basebackup和basebackup以後的wal日誌完成某個數據表的恢復或者某些page的恢復。項目開源地址:https://gitee.com/movead/pg_lightool。git
工具的安裝方法在以前的博客裏有詳細說明,再也不贅述。本文主要說明一下pg_lightool新功能的使用方法。新功能的主要應用場景:有基礎備份的數據量級比較大的數據庫,在發生表或者塊數據損壞時,用於損壞數據的快速恢復。數據庫
1、實驗數據準備工具
1.初始化數據庫後設置歸檔目錄測試
2.建立表插入測試數據spa
3.以下閉庫後刪除剛纔產生的wal日誌。用於保證數據是從basebackup獲取的。.net
4.啓動數據庫作基礎備份3d
5.測試數據修改(塗掉的地方是log輸出有點串行,忽略便可)日誌
2、基於basebackup和wal日誌的單表徹底恢復blog
1.關閉數據庫,模擬表破壞 事務
2.閉庫,執行恢復命令後查看數據
說明:
使用-b 參數爲-1即爲全表恢復。
使用-r參數指定basebackup的路徑。
命令執行成功後,在數據文件所在的目錄生成wtrbk_*_*目錄保存舊的數據
說明:表徹底恢復的數據正確。
3、基於basebackup和wal日誌的單表不徹底恢復
在修改測試數據的時候,有一個delete語句,假設這個delete語句是誤操做。咱們想把數據恢復到這個delete語句以前,應該怎麼辦?以下是使用pg_lightool工具的不徹底恢復演示過程。
1.使用pg_waldump到wal日誌中查看這個delete語句的以前成功的一個事務提交,以下結果能夠看出delete語句的xid是581,前一個提交的事務是580
2.閉庫執行恢復,並查看結果
說明:
使用了-x參數指定中止wal日誌redo的xid,還能夠替換爲使用-e參數指定時間。
假設delete爲誤操做,此時誤操做數據已恢復,不徹底恢復出的數據正確。
4、基於basebackup和wal日誌的單block徹底恢復
1.閉庫刪除t2的數據,並執行恢復命令
說明:-b參數指定要恢復的page爲0,1,2
2.查看數據
說明:表徹底恢復的數據正確。
5、基於basebackup和wal日誌的單block不徹底恢復
1.閉庫刪除t2的數據,並執行恢復命令
2.查看數據
說明:表不徹底恢復的數據正確。
6、後記
1.此恢復操做沒有計入wal日誌,所以執行恢復後,須要當即備份。
2.目前代碼只適用pg10以及以前的版本。
3.若有bug請issue或聯繫我(lchch1990@sina.cn)