PostgreSQL的pg_basebackup備份恢復詳解


備份

pg_basebackup -D /tmp/pg_backup/ -Ft -Pv -U postgres -h 1.15.57.253 -p5432 -R

 -D 空文件,沒有該目錄會自動創建
 F 格式話
 t  打包為tar包
 Pv顯示備份的詳細過程
 -u 用戶
 -p 端口

 

備份報錯

在配置文件pg_hba.conf增加一行

 

備份流程:

pg_basebackup: initiating base backup, waiting for checkpoint to complete   #開始基礎備份,等待檢查點完成
pg_basebackup: checkpoint completed                                         #已完成檢查點
pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1         #預寫日志起始於時間點: 0/2000028, 基於時間軸1
pg_basebackup: starting background WAL receiver                             #啟動后台 WAL 接收進程
pg_basebackup: created temporary replication slot "pg_basebackup_24583"     #已創建臨時復制槽"pg_basebackup_24583"
24598/24598 kB (100%), 1/1 tablespace                                                    
pg_basebackup: write-ahead log end point: 0/2000138                         #預寫日志結束點: 0/2000138
pg_basebackup: waiting for background process to finish streaming ...       #等待后台進程結束流操作...
pg_basebackup: syncing data to disk ...                                     #同步數據到磁盤
pg_basebackup: base backup completed                                        #基礎備份已完成

備份出來的結果

 

恢復

[root@VM-0-9-centos data]# rm -rf /pgdata/12/data
[root@VM-0-9-centos data]# rm -rf /pgdata/12/arch

 

tar -xvf base.tar -C /pgdata/12/data

tar -xvf pg_wal.tar -C /pgdata/12/arch

 

vi postgresql.auto.conf 追加

restore_command = 'cp /pgdata/12/arch/%f %p'

recovery_target = 'immediate'

 

touch /pgdata/12/recovery.signal

 

恢復成功

注意:data目錄需要有700權限

需要進行操作

select pg_wal_replay_resume();

 

恢復到某個時刻

假設每天凌晨有一次全備,某天中午14點誤刪數據,如何恢復

恢復原理:

全備+歸檔+在線redo

 

模擬測試

周一數據

全備

周二數據

 

此時14點,誤刪了庫

切一下歸檔

關庫

pg_ctl -D /pgdata/12/data stop -mi

 

刪除數據

rm -rf /pgdata/12/data/*

 

將備份解壓到數據目錄

tar -xvf base.tar -C /pgdata/12/data

使用pg_waldump查看需要恢復到哪個事務之前

恢復到502之前

 

編輯配置文件

postgresql.auto.conf追加

restore_command = 'cp /pgdata/12/arch/%f %p'
recovery_target_xid='501'

 

啟動數據庫

pg_ctl -D /pgdata/12/data -l logfile start

 

將恢復停止

select pg_wal_replay_resume();

 

恢復成功

備份

pg_basebackup -D /tmp/pg_backup/ -Ft -Pv -U postgres -h 1.15.57.253 -p5432 -R

  • -D 空文件,沒有該目錄會自動創建

  • F  格式話

  • t  打包為tar包

  • Pv 顯示備份的詳細過程

  • -u 用戶

  • -p 端口

備份報錯:

圖片

在配置文件pg_hba.conf增加一行:

圖片

備份流程:

圖片

pg_basebackup: initiating base backup, waiting for checkpoint to complete   #開始基礎備份,等待檢查點完成

pg_basebackup: checkpoint completed                                         #已完成檢查點

pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1         #預寫日志起始於時間點: 0/2000028, 基於時間軸1

pg_basebackup: starting background WAL receiver                             #啟動后台 WAL 接收進程

pg_basebackup: created temporary replication slot "pg_basebackup_24583"     #已創建臨時復制槽"pg_basebackup_24583"

24598/24598 kB (100%), 1/1 tablespace                                                    

pg_basebackup: write-ahead log end point: 0/2000138                         #預寫日志結束點: 0/2000138

pg_basebackup: waiting for background process to finish streaming ...       #等待后台進程結束流操作...

pg_basebackup: syncing data to disk ...                                     #同步數據到磁盤

pg_basebackup: base backup completed                                        #基礎備份已完成

備份出來的結果:

圖片

 

恢復

[root@VM-0-9-centos data]# rm -rf /pgdata/12/data[root@VM-0-9-centos data]# rm -rf /pgdata/12/archtar -xvf base.tar -C /pgdata/12/datatar -xvf pg_wal.tar -C /pgdata/12/arch

vi postgresql.auto.conf 追加:

restore_command = 'cp /pgdata/12/arch/%f %p'recovery_target = 'immediate'touch /pgdata/12/recovery.signal

恢復成功:

圖片

注意:data目錄需要有700權限。

圖片

需要進行操作:

select pg_wal_replay_resume();

 

恢復到某個時刻

假設每天凌晨有一次全備,某天中午14點誤刪數據,如何恢復?

恢復原理:

全備+歸檔+在線redo

模擬測試:

周一數據:

圖片

全備:

圖片

周二數據:

圖片

此時14點,誤刪了庫:

圖片

切一下歸檔:

圖片

圖片

圖片

關庫:

pg_ctl -D /pgdata/12/data stop -mi

刪除數據:

rm -rf /pgdata/12/data/*

將備份解壓到數據目錄:

tar -xvf base.tar -C /pgdata/12/data

使用pg_waldump查看需要恢復到哪個事務之前。

恢復到502之前:

圖片

編輯配置文件:

postgresql.auto.conf追加:

restore_command = 'cp /pgdata/12/arch/%f %p'recovery_target_xid='501'

啟動數據庫:

pg_ctl -D /pgdata/12/data -l logfile start

將恢復停止:

select pg_wal_replay_resume();

恢復成功:

圖片

 

原文:https://www.modb.pro/db/193193?sjhy

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM