PostgreSQL Replication之第三章 理解即时恢复(1)
到现在为止,您已经掌握了一定的理论。因为生活不仅由理论组成(它可能同样重要),是时候深入实际的工作了。
本章的目标是让您明白如何恢复数据到一个给定的时间点。当您的系统崩溃或者有人意外地删除了一个表,不重放整个事务日志,而是重放 其中的一小部分,这是非常重要的。即时恢复(PITR,Point-In-Time-Recovery)将是做这种部分事务日志重放的工具。
在本章中,您将学到关于即时恢复(PITR)的所有您需要知道的信息,并且会有实际的例子来引导您。因此,我们将应用所有您已经在第二章所学习的概念,理解 PostgreSQL 事务日志,建立增量备份或者设置一个简单的,基本的备份系统。
下面是我们将在本章讲解的主题的概述:
• 理解 PITR 背后的概念
• 配置 PostreSQL PITR
• 运行 pg_basebackup
• 恢复 PostgreSQL 到一个特定的时间点
3.1 理解PITR的作用
PostgreSQL 提供了一个可以备份一个数据库的工具,叫做pg_dump。基本上,pg_dump 会连接到数据库,读取事务隔离级别“序列化”所有的数据,并把数据以文本的形式返回。由于我们使用的是“序列化”,转储始终保持一致。所以,如果您的pg_dump 在午夜开始,结束于上午六点。您将创建一个备份,其包含截至午夜的所有数据,但没有进一步的数据。对从少量到中量的数据来说,这种快照创建是非常方便,并且是完全可行的。
[转储始终保持一致。这意味着所有的外键都完好无损;开始转储后,新添加的数据将丢失。这可能是最有可能的执行标准备份的最常见的方式。]
但是,如果您的数据是如此宝贵并且规模也是如此之大,以至于您要对它进行整理备份;对于高度关键的数据,它显然不是。除此之外,以文本形式重放20TB的数据效率也不高。已经设计了即时恢复来解决这个问题。它是如何工作的呢?基于数据库的快照,稍后,XLOG 将会被重放。这可以无限制地执行,或者到一个您选择的时间点。通过这种方式,您可以到达任何时间点。此方法打开了许多不同的方法和功能的大门。
• 还原数据库实例到一个给定的时间点
• 创建一个备份数据库,其中包含原始数据库的副本
• 创建一个所有更改的历史记录
在本章中,我们将专门研究增量备份的功能。并描述如何通过增量归档改变一个选择的媒介使您的数据更安全。
3.1.1移动到架构角度
下面的图片提供了一个使用即时恢复的通用架构图的概貌:

我们已经在前面的章节看到PostgreSQL产生16MB的事务日志段。每当这些段中的一个被填满并准备就绪是,PostgreSQL将调用所谓的archive_command。archive_command 的目的是把 XLOG文件从数据库实例传输到存档。在我们的图片中,归档在图片的右下角的小方框表示。
该设计的妙处在于,您基本上可以使用任意的shell脚本来归档事务日志。这里有一些想法:
• 使用一些简单的复制来传输数据到一个NFS共享
• 运行 rsync 来移动文件
• 使用定制脚本来校验XLOG文件并将其移动到一个FTP服务器
• 复制 XLOG 文件到磁带
可能的管理XLOG的选择值受到想象力的限制。
restore_command 准确地与archive_command 相对应。它的作用是从归档获取数据并将其提供给实例,这是为了重放它(在我们的图片中,这被标记为还原备份)。正如您所看到的,如本章所述,重放可能被用于复制或者仅仅恢复一个数据库到一个给定的时间点。同样,restore_command 只是一个简单的可以一个文件一个文件地做您所希望的事情的脚本。
[ 作为全能的管理者的您负责归档是很重要的。您必须决定保持多少的XLOG,什么时候删除它。这项任务的重要性不能被低估。]
请记住,当由于某种原因archive_command 失败时,PostgreSQL 将保持XLOG文件几秒钟后会重新尝试。如果归档从某个特定的点不断地失败,可能是master填满了。XLOG文件的顺序不能被中断;如果一个文件丢失了,您就不能继续重放XLOG了。所有的XLOG文件必须存在,因为PostgreSQL需要一个序列不间断的XLOG文件。如果一个文件丢失,恢复进行将停止在最新的位置。
PostgreSQL Replication之第三章 理解即时恢复(1)的更多相关文章
- PostgreSQL Replication之第三章 理解即时恢复(3)
3.3 做基础备份 在上一节中,您已经看到,启用归档只需要几行命令,并提供了极大的灵活性.在本节,我们将看到如何创建一个所谓的基础备份,稍后这可以使用XLOG.一个基本备份是一个最初的数据的拷贝. [ ...
- PostgreSQL Replication之第三章 理解即时恢复(4)
3.4 重放事务日志 一旦我们创建了一个我们自己的初始基础备份,我们可以收集数据库创建的XLOG.当时间到时,我们可以使用所有这些XLOG 文件并执行我们所期望的恢复进程.这就像本节描述的一样工作. ...
- PostgreSQL Replication之第三章 理解即时恢复(2)
3.2 归档事务日志 看过图片之后,我们可以看看如何使这些东西进入工作状态.当谈到及时归档时,您需要做的第一件事是归档XLOG.PostgreSQL通过postgresql.conf提供了所有与归档相 ...
- PostgreSQL Replication之第七章 理解Linux高可用(6)
7.6 PostgreSQL和高可用性 数据库是我们日常数字生活的一部分,并期望它们快速工作. 您浏览网上论坛吗?那个帖子在数据库中.您看医生吗?您的医疗记录在数据库中.您在网上购物吗?那个货物,您的 ...
- PostgreSQL Replication之第七章 理解Linux高可用(1)
高可用(HA)是工业长期持续的,不间断的服务.在本章,您将了解高可用软件的历史,概念和实现与PostgreSQL复制和高可用之间的关系. 本章将详细地讲述如下主题: •理解高可用性的目的 •衡量可用性 ...
- PostgreSQL Replication之第七章 理解Linux高可用(2)
7.2 衡量可用性 可用性是提供商试图保证一定的可用性级别和客户可以期望的可用性或更多.在某些情况下(取决于服务合同) 收取罚款或减少申购费用是意外停机的原因. 可用性的质量使用百分数来衡量:例如,9 ...
- PostgreSQL Replication之第七章 理解Linux高可用(5)
7.5 高可用性是所有冗余 让我们从一个不同的角度看一下前面的混合超市的例子.为了处理大量顾客无需长排队,无需关闭超市,混合超市雇用更多的出纳员以及安装许多(甚至更多)的收银机. 这样,如果一个收银机 ...
- PostgreSQL Replication之第七章 理解Linux高可用(4)
7.4 术语与概念 一组计算机被称为集群.集群内的一台计算机被称为一个节点. 当集群内的节点数量是 N (2,,3,等.) ,那么我们讨论一个N节点的集群. 高可用性软件,传输层和集群管理层都运行于每 ...
- PostgreSQL Replication之第七章 理解Linux高可用(3)
7.3 高可用软件的历史 有大量的专有的和开源的高可用性软件.专有的例子有:Solaris Cluster (有时称为Sun 集群 or SunCluster), SteelEye LifeKeepe ...
随机推荐
- extjs 时间范围选择的实现
extjs中 有时须要选择一个日期范围 ,须要自己主动推断,选择的開始日期不能大于结束日期,或结束日期不能小于開始日期,实现的代码例如以下 效果图: watermark/2/text/aHR0cDov ...
- 黑马day15 文件上传&apche的工具包
1.肯定要导入apche的jar包 2.要使用的类的介绍.. 2.1DiskFileItemFactory public DiskFileItemFactory(int sizeThreshold, ...
- HDU5638 / BestCoder Round #74 (div.1) 1003 Toposort 线段树+拓扑排序
Toposort 问题描述 给出nn个点mm条边的有向无环图. 要求删掉恰好kk条边使得字典序最小的拓扑序列尽可能小. 输入描述 输入包含多组数据. 第一行有一个整数TT, 表示测试数据组数. 对 ...
- tensorfllow MNIST机器学习入门
MNIST机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手.如果你已经了解MNIST和softmax回归(softmax regression)的相关知识,你可以阅读 ...
- pjlib深入剖析和使用详解
1. PJSIP简介 PJSIP的实现是为了能在嵌入式设备上高效实现SIP/VOIP.其主要特征包括: 1).极具移植性.(Extremely portable) ...
- C#调用webservice(二)
第二篇调用webservice,web服务是http://webservice.webxml.com.cn/webservices/DomesticAirline.asmx,航班查询服务 添加web服 ...
- 51nod-1503 猪和回文 - 二维矩阵上的dp
题目链接 一只猪走进了一个森林.很凑巧的是,这个森林的形状是长方形的,有n行,m列组成.我们把这个长方形的行从上到下标记为1到n,列从左到右标记为1到m.处于第r行第c列的格子用(r,c)表示. 刚开 ...
- css part 2
CSS 盒子模型 margin: 用于控制元素与元素之间的距离:margin的最基本用途就是控制元素周围空间的间隔,从视觉角度上达到相互隔开的目的. padding: ...
- 路飞学城Python-Day17
[1.编程范式] 1.面向过程编程 2.面向对象编程 [2.面向过程编程] 面向过程:核心就是过程 什么是过程? 过程指的是解决问题的步骤,先做什么,在作什么,面向过程就像是设计一个流水线,是一种 ...
- React 第二天
第二天 01 关于Vue和React中key的作用 在循环的时候一定要为组件加key 02关于jsx语法的注意事项 jsx中的注释 {/* */} class要写成className label标签 ...