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

Download

2019/12/05

李傳成Contributor

瀚高軟件內核研發工程師,主要的研究wal日志,并基于對wal日志的理解開發了wal相關的開源項目walminer和pg_lightool

在大象的世界里,砥礪前行,move ahead。

博客:https://my.oschina.net/lcc1990

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

      工具的安裝方法在之前的博客里有詳細說明,不再贅述。本文主要說明一下pg_lightool新功能的使用方法。新功能的主要應用場景:有基礎備份的數據量級比較大的數據庫,在發生表或者塊數據損壞時,用于損壞數據的快速恢復。

一、實驗數據準備

1.初始化數據庫后設置歸檔目錄

2.創建表插入測試數據

3.如下閉庫后刪除剛才產生的wal日志。用于保證數據是從basebackup獲取的。

4.啟動數據庫做基礎備份

5.測試數據修改(涂掉的地方是log輸出有點串行,忽略即可)

 

二、基于basebackup和wal日志的單表完全恢復

1.關閉數據庫,模擬表破壞 

2.閉庫,執行恢復命令后查看數據

說明:

使用-b 參數為-1即為全表恢復。

使用-r參數指定basebackup的路徑。

命令執行成功后,在數據文件所在的目錄生成wtrbk_*_*目錄保存舊的數據

說明:表完全恢復的數據正確。

 

三、基于basebackup和wal日志的單表不完全恢復

在修改測試數據的時候,有一個delete語句,假設這個delete語句是誤操作。我們想把數據恢復到這個delete語句之前,應該怎么辦?如下是使用pg_lightool工具的不完全恢復演示過程。

1.使用pg_waldump到wal日志中查看這個delete語句的之前成功的一個事務提交,如下結果可以看出delete語句的xid是581,前一個提交的事務是580

2.閉庫執行恢復,并查看結果

說明:

使用了-x參數指定停止wal日志redoxid,還可以替換為使用-e參數指定時間。

假設delete為誤操作,此時誤操作數據已恢復,不完全恢復出的數據正確。

 

四、基于basebackup和wal日志的單block完全恢復

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

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

2.查看數據

說明:表完全恢復的數據正確。

 

五、基于basebackup和wal日志的單block不完全恢復

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

2.查看數據

說明:表不完全恢復的數據正確。

 

六、后記

1.此恢復操作沒有計入wal日志,因此執行恢復后,需要立即備份。

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

3.如有bug請issue或聯系我([email protected]

44.1K
今天贵州十一选五走势图