PostgreSQL從入門到精通 - 第40講:資料庫不完全恢復

unix_5359發表於2024-01-04
PostgreSQL從入門到精通 - 第40講:資料庫不完全恢復


PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內容包括對PG基礎的認知、包括安裝使用、包括角色許可權、包括維護管理、、等內容,希望對熱愛PG、學習PG的同學們有幫助,歡迎持續關注CUUG PG技術大講堂。


第40講:資料庫不完全恢復


PostgreSQL第40講:1月6日(週六)19:30,釘釘群(35822460)& 影片號(資料庫老陳)直播

內容1:描述不完全恢復步驟

內容2:時間點恢復工作原理

內容3:執行一個不完全恢復


不完全恢復應用場景

由於歸檔日誌丟失,完全恢復失敗。

所有未歸檔的wal日誌檔案都將丟失。

使用者錯誤

一張重要的表被刪除。

表中無效的資料被提交。


時間點恢復如何工作

時間點恢復

假設你在2020年4月28日12:05犯了一個錯誤。您應該刪除資料庫群集,並使用之前所做的基本備份還原新的資料庫群集。然後恢復到12:04:59,停止在錯誤發生之前。

PostgreSQL從入門到精通 - 第40講:資料庫不完全恢復

PITR恢復起始點定位

PITR恢復過程重要的兩個因素:

1、從哪裡讀取WAL段/歸檔日誌?

PITR mode–來自配置引數archive_command中設定的存檔目錄。

2、從哪裡讀取檢查點位置?

PITR模式–來自備份標籤檔案。


時間點恢復圖示

Recover the database at 12:15:00 along the timelineId 2

PostgreSQL從入門到精通 - 第40講:資料庫不完全恢復

不完全恢復型別

recovery_target = 'immediate'  這個引數指定恢復應該在達到一個一致狀態後儘快結束。在從一個線上備份中恢復時,這意味著備份結束後的那個點。

recovery_target_name (string)  指定pg_create_restore_point()所建立的已命名的恢復點,進行恢復。

recovery_target_time (timestamp)  指定需要恢復到的時間點。

recovery_target_xid (string)  指定按事務 ID進行恢復。

recovery_target_lsn (pg_lsn)  指定按預寫日誌位置的LSN進行恢復。


不完全恢復指導方針

仔細遵循所有步驟:

在恢復前後進行整個資料庫備份。

始終驗證恢復是否成功。

備份和刪除歸檔日誌。


不完全恢復和日誌

恢復前後檢查資料庫日誌

包含錯誤資訊、提示和txid


執行不完全恢復流程

關閉並備份資料庫。

還原備份的所有資料檔案。

設定需要恢復到的時間點,或者某個位置。

生成recovery.signal檔案。

執行資料庫啟動。

把資料庫變成讀寫模式

對全庫做個冷備。


基於時間點恢復案例

當前情況:

目前的時間是2022年3月9日中午12點。

EMPLOYEES表已被刪除。

表在上午11點45分左右被刪除。

資料庫活動最小,因為大多數工作人員目前正在開會,意味著從11點45分以後發生的資料更改很少,丟失的資料也會少,因為這一段的資料在做不完全恢復時會丟失。

必須恢復該表。


執行一個基於時間點的恢復

1、還原備份的所有資料檔案

tar -vxf /backup/base.tar -C $PGDATA

2、修改postgresql.conf檔案

restore_command = 'cp /home/postgres/archive/%f %p'recovery_target_time = '2022-03-09 11:44:59'

3、在$PGDATA目錄下生成recovery.signal檔案

touch recovery.signal

4、執行資料庫啟動。

pg_ctl start

5、執行函式,把資料庫變成讀寫模式

select pg_wal_replay_resume();


表空間基於時間點的恢復

經過實驗證明,PG不支援表空間不完全恢復,如果做了表空間的時間點恢復,我們發現其它表空間也會做時間點恢復,即整個資料庫叢集都做時間點恢復,而不是單個表空間做時間點恢復。

CUUG PostgreSQL技術大講堂系列公開課第40講-資料庫不完全恢復,往期影片及文件,請聯絡CUUG。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/31544987/viewspace-3002705/,如需轉載,請註明出處,否則將追究法律責任。

相關文章