備份
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