备份

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

空文件,没有该目录会自动创建
F 格式话
t 打包为tar包
Pv显示备份的详细过程
-u 用户
-p 端口

 

备份报错

PostgreSQL的pg_basebackup备份恢复详解_数据

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

PostgreSQL的pg_basebackup备份恢复详解_误删_02

 

备份流程:

PostgreSQL的pg_basebackup备份恢复详解_误删_03

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

备份出来的结果

PostgreSQL的pg_basebackup备份恢复详解_数据_04

 

恢复

[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

 

恢复成功

PostgreSQL的pg_basebackup备份恢复详解_centos_05

注意:data目录需要有700权限

PostgreSQL的pg_basebackup备份恢复详解_误删_06

需要进行操作

select pg_wal_replay_resume();

 

恢复到某个时刻

假设每天凌晨有一次全备,某天中午14点误删数据,如何恢复

恢复原理:

全备+归档+在线redo

 

模拟测试

周一数据

PostgreSQL的pg_basebackup备份恢复详解_误删_07

全备

PostgreSQL的pg_basebackup备份恢复详解_误删_08

周二数据

PostgreSQL的pg_basebackup备份恢复详解_误删_09

 

此时14点,误删了库

PostgreSQL的pg_basebackup备份恢复详解_centos_10

切一下归档

PostgreSQL的pg_basebackup备份恢复详解_centos_11

PostgreSQL的pg_basebackup备份恢复详解_数据_12

PostgreSQL的pg_basebackup备份恢复详解_数据_13

关库

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的pg_basebackup备份恢复详解_误删_14

 

编辑配置文件

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();

 

恢复成功

PostgreSQL的pg_basebackup备份恢复详解_误删_15

备份

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

  • -D 空文件,没有该目录会自动创建
  • F  格式话
  • t  打包为tar包
  • Pv 显示备份的详细过程
  • -u 用户
  • -p 端口

备份报错:

PostgreSQL的pg_basebackup备份恢复详解_数据_16

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

PostgreSQL的pg_basebackup备份恢复详解_误删_17

备份流程:

PostgreSQL的pg_basebackup备份恢复详解_数据_18

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                                        #基础备份已完成

备份出来的结果:

PostgreSQL的pg_basebackup备份恢复详解_数据_19

 

恢复

[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

恢复成功:

PostgreSQL的pg_basebackup备份恢复详解_数据_20

注意:data目录需要有700权限。

PostgreSQL的pg_basebackup备份恢复详解_centos_21

需要进行操作:

select pg_wal_replay_resume();

 

恢复到某个时刻

假设每天凌晨有一次全备,某天中午14点误删数据,如何恢复?

恢复原理:

全备+归档+在线redo

模拟测试:

周一数据:

PostgreSQL的pg_basebackup备份恢复详解_数据_22

全备:

PostgreSQL的pg_basebackup备份恢复详解_误删_23

周二数据:

PostgreSQL的pg_basebackup备份恢复详解_误删_24

此时14点,误删了库:

PostgreSQL的pg_basebackup备份恢复详解_centos_25

切一下归档:

PostgreSQL的pg_basebackup备份恢复详解_centos_26

PostgreSQL的pg_basebackup备份恢复详解_数据_27

PostgreSQL的pg_basebackup备份恢复详解_centos_28

关库:

​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的pg_basebackup备份恢复详解_误删_29

编辑配置文件:

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();​

恢复成功:

PostgreSQL的pg_basebackup备份恢复详解_误删_30

 


日积月累