百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

详解PostgreSQL 12.2时间点恢复 (PITR)

qihemm 2025-06-20 20:02 6 浏览 0 评论

概述

PostgreSQL 提供了不同的方法来备份和恢复数据库,可以是某一时刻数据库快照的完整备份或增量备份,可以使用 SQL 转储或文件系统级别的备份,在增量备份的基础上还可以实现基于时间点恢复。 这里主要介绍增量备份和基于时间点恢复(PITR)


实现增量备份的思路是

1) 记录数据库系统的操作记录(WAL归档)

2) 在某一时刻进行一次完整的数据库备份

3) 需要恢复时,还原上一次完整的数据库备份,根据操作记录恢复数据库至指定的某个时刻(即可以实现PITR 时间点恢复)


一、增量备份

PostgreSQL 在做写入操作时,对数据文件做的任何修改信息,首先会写入WAL 日 志(预写日志),然后才会对数据文件做物理修改。 当数据库服务器掉电或意外宕机, PostgreSQL 在启动时会首先读取 WAL 日志,对数据文件进行恢复。 因此,从理论上讲, 如果我们有一个数据库的基础备份(也称为全备),再配合 WAL 日志,是可以将数据库恢复到任意时间点的。

1、修改wal_level参数

wal_level 参数可选的值有 minimal、 replica 和 logical ,从 minimal到 replica 再到 logical 级别, WAL 的级别依次增高,在 WAL 中包含的信息也越多。由于 minimal 这一级别的 WAL 不包含从基本的备份和 WAL 日志中重建数据的足够信息,在 minimal 模式下无法开启 archive_mode,所以开启 WAL 归档 wal_level 至少设置为 replica,如下所示 :

--命令行
ALTER SYSTEM SET wal_level = 'replica';

--配置文件postgresql.conf
wal_level = replica


2、修改archive_mode参数

archive_mode 参数可选的值有 on、off 和 always,默认值为 off,开启归档需要修改为 on,重启生效。

archive_command 参数的默认值是个空字符串,它的值可以是一条 shell 命令或者一个复杂的 shell 脚本。 在 archive_command 的 shell 命令或脚本中可以用“%p”表示将要归档 的 WAL 文件的包含完整路径信息的文件名,用

“%f”代表不包含路径信息的 WAL 文件的文件名,修改后不需要重启,reload即可。

--linux环境
archive_mode = on             
archive_command = 'test ! -f  /data/pgarch/%f &&  cp %p  /data/pgarch/%f'

--windows环境
archive_mode = on             
archive_command = 'copy "%p" "D:\\ProgramFiles\\pgdata\\archive\\%f"'

3、基于pg_basebackup创建基础备份

--创建REPLICATION角色
CREATE ROLE replica login replication encrypted password 'replica@1234';

--配置pg_hba.conf,允许远程流式备份
echo "host  replication replica  0.0.0.0/0   md5" >> pg_hba.conf

--远程使用pg_basebackup备份
systemctl stop postgresql
rm -rf /data/pgdata/* && rm -rf /data/pgtablespace/*
#-Fp表示以plain格式数据,-Xs表示以stream方式包含所需的WAL文件,-P表示显示进度,-R表示为replication写配置信息。
#备份完成,使用-R选项,在data目录下自动生成standby.signal“信号”文件(可手工使用touch命令生成)以及更新了postgresql.auto.conf文件
#postgresql.auto.conf中写入了主库的连接信息(可手工添加primary_conninfo信息)。
pg_basebackup --progress -D /data/pgdata -h xx.142 -p 55432 -U replica --password  -Fp -Xs -P -R



二、PG12 PITR

恢复过程完成后,服务器将删除recovery.signal(以防止以后意外重新进入恢复模式),然后开始正常的数据库操作。

1、环境准备

create table hwb(a int);
insert into hwb values (generate_series(1,1000000));
select now();
-- 2020-12-15 15:16:03.645+08
select pg_switch_wal();
delete from hwb;
select now();
-- 2020-12-15 15:17:55.078991+08
select pg_switch_wal();

--传输归档日志到异地服务器恢复
scp -r /data/pgarch/*  postgres@172.16.1.143:/data/pgarch


2、恢复到指定时间点

--配置postgresql.conf(注释archive相关参数)
touch recovery.signal
cat >> postgresql.conf <<EOF
restore_command = 'cp /data/pgarch/%f %p'
recovery_target_time = '2020-12-15 15:16:03.645+08'
EOF

--启动数据库(这时候就恢复了)
systemctl start postgresql

--恢复正常使用
rm -rf recovery.signal
在 postgresql.conf注释restore相关参数后重启


3、恢复到最近时间点

cat > recovery.signal <<EOF
restore_command = 'cp /data/pgarch/%f %p'
recovery_target_timeline='latest'
EOF

配置文件 recovery.conf 添加上面两项。12 通过 recovery.signal 文件触发


4、恢复到指定还原点

postgres=# select pg_create_restore_point('my-restore-point1');
pg_create_restore_point
-------------------------
0/8000290
(1 row)
restore_command = 'cp /data/pgarch/%f %p'
recovery_target_name='my-restore-point1'

配置文件 recovery.conf 添加上面两项。12 通过 recovery.signal 文件触发


5、恢复到指定事务

select txid_current(); --查询当前事务 xid

restore_command = 'cp /data/pgarch/%f %p'
recovery_target_xid=723

配置文件 recovery.conf 添加上面两项。12 通过 recovery.signal 文件触发


6、恢复到指定时间线

restore_command = 'cp /data/pgarch/%f %p'
recovery_target_timeline=2
recovery_target_time='2020-12-15 15:15:00'

配置文件 recovery.conf 添加上面两项。12 通过 recovery.signal 文件触发


后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下!

相关推荐

VLOOKUP的18种高阶用法大公开!99%的人都不知道的神操作!

作为被头条用户催更的Excel课代表,今天带来让HR追着要模板、让老板主动加薪的VLOOKUP终极指南!从基础到高阶一网打尽,文末送36个行业专用模板!一、为什么你的VLOOKUP总报错?血泪大数据...

Vlooup公式,2种模糊查找匹配,1分钟学会

工作中,VLOOKUP公式使用频率是很高的,用来各种查找匹配问题今天我们分享两种模糊查找匹配问题,一种是文本的模糊查找匹配,一种是数字的模糊查找匹配问题1、文本模糊查找匹配使用模拟数据举个例子,原始数...

与vlookup功能相似的函数,照样搞定表格数据查询,简单还实用

在日常表格数据处理工作,说到数据查询,很多小伙伴首先想到的是Vlookup函数,老师的教程中也多次讲到Vlookup函数的用法和实例。其实在Excel中还有其他的数据查询函数公式或技巧,今天我们先来学...

别再折腾VLOOKUP了!DGET逆向查找10秒通关,小白必看

今天要掀翻一个“过气网红”——VLOOKUP!你是不是也经历过这些崩溃瞬间:逆向查找要交换列顺序,复制粘贴到手软!多条件查找要嵌套MATCH,公式长到怀疑人生!别忍了!今天教你用DGET函数一键封...

职场新人必学!VLOOKUP函数10分钟速成指南

正文:"今天来讲解办公人入职期初函数VLOOKUP,这是所有职场人最重要也是最基础的技能。掌握它,90%的数据查找再不用求人!特别献给刚入职场的你——别让Excel成为加班理由。"——...

巧用Vlookup函数揪出“第三者”(vlookup第三个参数是什么)

在一张Excel表格的重复记录中,让你快速列出每种不同物品第2次或第n次出现的记录,你会怎么做?Vlookup函数就有这个本事。举例来说,产品或者物流表格中往往会记录有同一货物的多笔数据(如下图的今日...

分享12个VLOOKUP超经典用法(vlookup通俗易懂)

刚毕业那会,面试的时候经常会被问到会不会用Excel?我就理直气壮地回答:“会啊。”毕竟,简历上可是写着熟练。接着面试官扔出一句“那你会VLOOKUP吗?”我还是会一口咬定:“我会。“其实,我都没用过...

查找匹配别只知道Vlookup,Sumifs也可以!

工作中遇到查找匹配问题的时候,大家第一反应是不是都想到的Vlookup公式呢,有没有小伙伴们给Sumifs一点点机会的呢,有时候Sumifs比Vlookup更好用1、Vlookup公式举个例子,左边是...

Excel函数讲解:VLOOKUP函数,轻松玩转数据查找

常用函数系列教学:VLOOKUP函数讲解(46)。不懂VLOOKUP函数怎么高效查找数据?闲话少叙直接开讲。基本含义:VLOOKUP函数用于在表格按垂直方向(到)上查找返回行数据。如何使用及注意事项?...

CHOOSEROWS+CHOOSECOLS原来是一个超级查找函数组合!

场景一:要在学生名册中,抽查一名学生成绩。公式:=CHOOSEROWS(A1:D5,2)解析:第一参数A1:D5为数据区域,第二参数2表示提取第2行数据。把数据区域改为A2:D5,结合RANDBETW...

数据查询不止有vlookup函数,自定义zlookup函数查询操作更高效

Excel数据查询,相信大家首先会想到vlookup函数。毋庸置疑vlookup函数在Excel数据查询中作用是非常的强大。但是它也有一些不能实现的数据查询。如上图所示,我们需要根据人员的出现次数,提...

「EXCEL进阶」VLOOKUP函数怎么查询一个值返回多个结果

前言:VLOOKUP函数一般一次只能返回一个结果,本例介绍通过辅助列的方法使VLOOKUP函数查询一个值,返回这个值对应的多个结果。使用场景举例:根据表格中同一数值,返回对应值的多个结果。比如这张数据...

WPS查找能手VLOOKUP函数使用方法讲解

各位同学好!今天我们来深度剖析WPS最实用的查找工具——VLOOKUP函数。这个函数能帮你在表格中快速定位并提取所需数据,可以帮你快速核对两批数据差异,还可以合并多个表格的关联信息,甚至可以帮你制作动...

Excel常用10个函数:跨表查找Vlookup,适用于大数据中查找精确值

Hello大家好,我是Office米,今天,我们将和大家一起分享交流,常用的10个函数之一:查找引用函数VLOOKUP。在说VLOOKUP函数之前,我们要先了解,平时Excel日常工作中会遇到哪些问题...

掌握了这个套路,无论用 Excel vlookup 函数查找第几次结果都很轻松

用vlookup查找默认情况下是一对一出结果,如果要一对多查找,就需要用到各种技巧,具体方法我写过非常多了,可以搜索一下历史记录。只要掌握了今天这个套路,无论你想查找第几次重复值,都易如反掌。案例...

取消回复欢迎 发表评论: