postgresql技術大講堂 - 第40講:數據庫不完全恢復
最新學訊:近期OCP認證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯系在線老師,甲骨文官方認證,報名從速!
我要咨詢
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,停止在錯誤發生之前。

PITR恢復起始點定位
PITR恢復過程重要的兩個因素:
1、從哪里讀取WAL段/歸檔日志?
PITR mode–來自配置參數archive_command中設置的存檔目錄。
2、從哪里讀取檢查點位置?
PITR模式–來自備份標簽文件。
時間點恢復圖示
Recover the database at 12:15:00 along the timelineId 2

不完全恢復類型
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。