25.3. Continuous Archiving and Point-in-Time Recovery (PITR)
25.3 连续归档和时间点恢复(PITR)
PostgreSQL总是在pg_wal目录下维护着WAL(预写日志)日志。日志记录了数据库中的所有变化。这些日志是出去崩溃安全目的而存在的:如果数据库或系统崩溃,数据库可以在启动时重演日志中最后一个检查点之后的内容,以使数据库保持一致。WAL日志的存在,给了我们一个新的备份策略可能:结合文件系统级别备份和WAL文件拷贝。如果需要恢复,则可以先还原文件系统备份,然后重新WAL文件至数据库最新状态。虽然比较复杂,但是优点也很突出:
无需完全一致的文件系统级别备份,即无需关闭数据库。
因为可以无限重演WAL,这使得增量备份成为可能(通过归档WAL日志实现)。
可使用基于时间点的恢复。可恢复到基础备份之后的任意时间点。
可创建温备库。
25.3.1 设置WAL归档
若想启用WAL归档,则首先需要将wal_level级别设置至少为replica级别;archive_mode为on;并指定archive_command所使用的归档命令。
25.3.2 进行基础备份
进行基础备份最简单的方式是使用 pg_basebackup。需要保留从刚开始进行基础备份开始的所有WAL日志。
25.3.3 使用低级别API进行基础备份
使用低级别API进行基础备份比pg_basebackup多几个步骤,但也相对简单。这些步骤需要顺序进行,且需保证每个步骤的成功。低级别基础备份可以是排他或非排他的。建议使用非排他方式。慢慢会遗弃排他方式。
25.3.3.1 创建非排他低级别备份
该类型的备份可允许其他并行备份:
确认WAL归档已正常启用;
连接到数据库,并执行以下命令:select pg_start_backup('label',false,false);
使用文件系统级别进行备份;
然后在相同连接中执行:select * from pg_stop_backup(false,true);
一旦备份期间的WAL日志归档,则操作完成。
25.3.3.2 创建排他低级别备份
不建议使用。
25.3.3.3 备份数据目录
备份数据目录时,有些命令在备份变化文件时可能会有警告或报错,这个不要紧。如果使用了自定义表空间,要一起拷贝。
25.3.4 使用连续归档备份进行恢复
恢复步骤:
关闭数据库服务;
如果有条件,冷备数据库;
移除所有数据目录及自定义表空间文件;
从文件系统备份恢复数据文件;
删除pg_wal/下的文件;
如果在2步有未归档的WAL文件,则将其拷贝到新的路径中;
在postgresql.conf文件中设置恢复配置,并在数据目录中创建recovery.signal文件。
启动数据库服务;
检查数据。
25.3.5 时间线
用以标记恢复后的WAL记录。
25.3.6 提示与范例
给出配置连续归档的提示。
25.3.6.1 独立热备
可对PostgreSQL进行独立热备。有了基础备份之后,创建独立热备最便捷的方式是使用pg_basebackup。
25.3.6.2 压缩归档日志
可使用gzip对归档日志进行压缩:
archive_command = 'gzip < %p > /var/lib/pgsql/archive/%f'
那恢复的时候需要使用命令:
restore_command = 'gunzip < /mnt/server/archivedir/%f > %p'
25.3.6.3 archive_command脚本
可使用脚本定义archive_command的值:
archive_command = 'local_backup_script.sh "%p" "%f"'
25.3.7 注意事项
连续归档技术有几点限制:
如果在进行基础备份是执行了CREATE DATABASE命令,会对恢复有影响;
CREATE TABLESPACE在WAL中记录的是绝对路径;
25.3. Continuous Archiving and Point-in-Time Recovery (PITR)相关推荐
- 以“升舱”之名,谈谈云原生数据仓库AnalyticDB的核心技术
背景 说到升舱,我们首先想到的是飞机经济舱升级到商务舱.头等舱.阿里云企业级云原生数据仓库AnalyticDB(以下简称ADB)[1]在帮助以金融机构为主的行业数字化转型和传统数仓升级项目中,也引用了 ...
- 以“升舱”之名,谈谈云原生数据仓库 AnalyticDB 的核心技术
背景 说到升舱,我们首先想到的是飞机经济舱升级到商务舱.头等舱.阿里云企业级云原生数据仓库AnalyticDB(以下简称ADB)[1]在帮助以金融机构为主的行业数字化转型和传统数仓升级项目中,也引用了 ...
- KDD_cup99 pytorch
提示:这个数据集我是简单归一化处理的,只是为了简单跑下实验学习用的,你如果用于跑论文的实验什么的,这个不能用,处理的效果不好. 如果想看数据处理,可以参考kaggle上的代码:Intrusion De ...
- inx的c语言表达式,Spninx 解决的问题
1.编译cmuclmtk http://www.cnblogs.com/libtool: line 479: CDPATH: command not found http://www.cnblogs. ...
- Sphinx武林秘籍(下)
为什么80%的码农都做不了架构师?>>> Sphinx武林秘籍(下) ――使用训练好的语言模型与声学模型 一.第一次使用 #cp -rf my_db.cd_cont_1000 ...
- 英语四级核心词,记住这些就够了
决胜四级1800核心词 1不一样的可能性 possible possibility impossible likely unlikely seem seemingly mi ...
- 连接服务器失败可能是oracle net,ora-28547:连接服务器失败,可能是 Oracle Net 管理失败...
检查如下: 监听程序的配置文件 发现多了 (PROGRAM = extproc) 去掉后如下: # listener.ora Network Configuration File: C:\oracle ...
- Oracle为什么不需要double write?
近期看到朋友圈转发了几篇关于MySQL innodb double write的文章:感觉都还不错.突然想到为什么Oracle没有这个东西?PostgreSQL是否也有类似机制? 在网上搜了一下,发现 ...
- 史上最强解读:Oracle里面为什么没有double write?
导读:MySQL有double write机制,PostgreSQL有full page write机制,那么Oracle里面为什么没有类似机制呢? 近期看到朋友圈转发了几篇关于MySQL innod ...
最新文章
- 【怎样写代码】参数化类型 -- 泛型(四):泛型之类型参数约束
- 解决svn Authorization failed错误
- swift--添加新手引导页
- 麦肯锡发布《中国互联网公司崛起报告》
- jQuery dataTables 的使用
- Mysql当前模式让不记录日志_MySQL日志binlog的三种模式
- 【转】提高PHP性能的53个技巧
- C# SFTP上传文件
- 开机启动项_开机时出现“checking media presence”
- 【渝粤教育】国家开放大学2018年秋季 2312T旅行社经营管理 参考试题
- 数据结构——>数组模拟环形队列
- (简单控制) 关于使用NI max 的GPIB来控制安捷伦万用表34401A 的操作方法
- H263、H264和3GPP、MPEG4是什么关系
- 6D姿态估计算法汇总
- App通过QQ/微信登录绑定用户信息的一般流程
- 华为发布下一代智能产品战略及全新+AI系列新品!
- 无法定位程序输入点_invalid_parameter_noinfo_noreturn于动态链接库 MSVCR100.dll上
- [USACO06NOV]糟糕的一天Bad Hair Day
- 中学生学籍信息管理系统
- SECTION 1 python核心编程 快速入门
热门文章
- ORA-12514: TNS:listener does not currently know of service requested in connect descript
- 华为应用市场AGC研习社游戏课程上新,助力游戏开发者高效分发获量
- 从零开始学python的第14天
- ratel平头哥电脑感染app
- 【NOIP2014提高组】石头剪子布
- python中文社区-python
- C语言pta————查找书籍
- 利用ArcGIS创建注记层制作方法及注意事项
- HttpException: 503: Server Error for url:http://cic-1:9696/v2.0/security-groups, Service Unavailable
- Lamber表达式 List,Map,Set 互相转换