pg_lightool基於basebackup的單表恢復和塊恢復

    開源軟件pg_lightool,實現了基於wal日誌的塊恢復。詳情參見博客:https://my.oschina.net/lcc1990/blog/1931485。因爲wal日誌中FPW的不肯定性,它不能做爲一個數據庫恢復的解決方案。目前對pg_lightool的代碼作了升級,它能夠基於一個basebackup和basebackup以後的wal日誌完成某個數據表的恢復或者某些page的恢復。項目開源地址:https://gitee.com/movead/pg_lightoolgit

      工具的安裝方法在以前的博客裏有詳細說明,再也不贅述。本文主要說明一下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日誌redoxid,還能夠替換爲使用-e參數指定時間。

假設delete爲誤操做,此時誤操做數據已恢復,不徹底恢復出的數據正確。

 

4、基於basebackup和wal日誌的單block徹底恢復

1.閉庫刪除t2的數據,並執行恢復命令

說明:-b參數指定要恢復的page0,1,2

2.查看數據

說明:表徹底恢復的數據正確。

 

5、基於basebackup和wal日誌的單block不徹底恢復

1.閉庫刪除t2的數據,並執行恢復命令

2.查看數據

說明:表不徹底恢復的數據正確。

 

6、後記

1.此恢復操做沒有計入wal日誌,所以執行恢復後,須要當即備份。

2.目前代碼只適用pg10以及以前的版本。

3.若有bug請issue或聯繫我(lchch1990@sina.cn)

相關文章
相關標籤/搜索