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文件。如果一个文件丢失,恢复进行将停止在最新的位置。

时间: 2024-12-18 18:57:08

PostgreSQL Replication之第三章 理解即时恢复(1)的相关文章

PostgreSQL Replication之第三章 理解即时恢复(3)

3.3 做基础备份 在上一节中,您已经看到,启用归档只需要几行命令,并提供了极大的灵活性.在本节,我们将看到如何创建一个所谓的基础备份,稍后这可以使用XLOG.一个基本备份是一个最初的数据的拷贝. [请记住,XLOG本身是没有什么价值的.只是在和初始备份联合起来的时候是有用的.] 在PostgreSQL中,有两个主要的选择来创建一个初始的基本备份: • 使用 pg_basebackup • 传统的基于 copy/rsync 的方法 下面两节将详细地介绍如何创建一个基础备份: 使用pg_baseb

PostgreSQL Replication之第三章 理解即时恢复(4)

3.4 重放事务日志 一旦我们创建了一个我们自己的初始基础备份,我们可以收集数据库创建的XLOG.当时间到时,我们可以使用所有这些XLOG 文件并执行我们所期望的恢复进程.这就像本节描述的一样工作. 执行基本恢复 在PostgreSQL中,整个恢复过程有一个称为recover.conf的文件管理,其主要驻留在基础备份的主目录中.在启动的时候被读取,并告诉数据库服务器到哪里可以找到XLOG归档,什么时候终止重放,等等. 为了让您开始恢复,我们决定为执行一个基本的备份过程包含一个简单的recover

PostgreSQL Replication之第三章 理解即时恢复(2)

3.2 归档事务日志 看过图片之后,我们可以看看如何使这些东西进入工作状态.当谈到及时归档时,您需要做的第一件事是归档XLOG.PostgreSQL通过postgresql.conf提供了所有与归档相关的选项.让我们一步一步地看,要启动归档需要在postgresql.conf中做什么: 1. 首先,您应该把archive_mode设置为 on. 2. 第二步,您应该配置您的归档命令.归档命令是一个简单的带有两个参数的shell命令: 1. %p: 这是一个表示应该被归档的的XLOG的占位符,包括

HTML与CSS入门——第三章 理解HTML和XHTML的关系

知识点: 1.以HTML创建一个简单网页的方法 2.包含每个网页必须有的所有HTML标签的方法 3.用段落和换行组织页面的方法 4.用标题组织内容的方法 5.HTML.XML.XHTML和HTML5之间的差别 3.1 从一个简单的网页开始: 作者建议:从简单的文本编辑器开始学习,之后再转向可视化工具. 扩展名支持:.htm以及.html 如.jsp,.asp,.php之类的文件类型使用超出了HTML范围的服务器端技术,需要专门的服务端支持.比如Apache服务器 3.2 每个XHMTL网页必须有

PostgreSQL Replication之第四章 设置异步复制(1)

执行完您的第一个即时恢复(PITR,Point-In-Time-Recovery),我们准备在一个真正的复制设置上工作.在本章,您将学会如何设置异步复制和流.我们的目标是确保您可以实现更高的高可用和更高的数据安全性. 在本章,我们将讨论以下主题: • 配置异步复制 • 理解流 • 合并流和归档 • 管理时间线 在本章的最后,您将很容易地在几分钟内设置流复制. 4.1 设置流复制 在前面章节中,我们已经从简单的16MB XLOG文件做了恢复.从逻辑上讲,重放进程一次只能重放16MB.这在您的复制设

PostgreSQL Replication之第六章 监控您的设置(1)

在本书的前几章,您已经学习了各种复制以及如何配额制各种类型的场景.现在是时候通过增加监控来让您的设置更加可靠了. 在本章中,您将学习监控什么以及如恶化实施合理的监控车辆.您将学习: • 检查您的 XLOG 归档 • 检查 pg_stat_replication 系统视图 • 检查操作系统级别复制相关的进程 在本章的最后您应该能够正确地监控任何类型的复制设置. 6.1 检查您的归档 如果您计划使用即时恢复(PITR, Point-In-Time-Recovery)或如果您想使用XLOG归档来帮助您

PostgreSQL Replication之第六章 监控您的设置(2)

6.2 检查pg_stat_replication 检查归档以及 archive_command主要用于即时恢复( PITR,Point-In-Time- Recovery).如果您想监控一个基于流的设置,建议您 注意系统上称作pg_stat_replication的视图.此视图包含以下信息: test=# \d pg_stat_replication View "pg_catalog.pg_stat_replication" Column | Type | Modifiers ---

PostgreSQL Replication之第四章 设置异步复制(7)

4.7 冲突管理 在PostgreSQL中,流复制数据仅在一个方向流动.XLOG由master提供给几个slave,这些slave消耗事务日志并为您提供一个较好的数据备份.您可能想知道这怎么会导致冲突,这会发生冲突. 考虑一下情形:如您所知,数据复制有很小的延迟.因此,XLOG在由master产生之后结束于slave.这微小的延迟会引起如下图所示的情景: 我们假设一个slave开始读取一个表.它是一个长读操作.与此同时,master收到一个请求,实际地删除那个表.这有一点问题,因为slave仍然

PostgreSQL Replication之第四章 设置异步复制(4)

4.4 基于流和基于文件的恢复 生活并不总只是黑色或白色:有时也会有一些灰色色调.对于某些情况下,流复制可能恰到好处.在另一些情况下,基于文件复制和PITR是您所需要的.但是也有许多情况下,您既需要流复制,也需要基于文件的复制.一个例子是:当您较长一段时间中断复制,您可能想再次使用归档来重新同步(resync)slave,而不是再次执行完全的基础备份.这也可能是有用的---保留一个归档一段时间以后调查或重放操作.好消息是PostgreSQL允许您混合基于文件和基于流的复制.您没有必要决定基于流的