recovery.conf文件详解

2018/08/17 12:55
阅读数 42

 简介

在恢复过程中,用户可以通过使用recovery.conf文件来指定恢复的各个参数,如下:

  • 归档恢复设置

    • restore_command:用于获取一个已归档段的XLOG日志文件的命令
    • archive_cleanup_command:清除不在需要的XLOG日志文件的命令
    • recovery_end_command:归档恢复结束后执行的命令
  • 恢复目标设置(默认情况下,数据库将会一直恢复到 WAL 日志的末尾)

    • recovery_target = ’immediate’:在从一个在线备 份中恢复时,这意味着备份结束的那个点
    • recovery_target_name (string):这个参数指定(pg_create_restore_point()所创建)的已命名的恢复点,将恢复到该恢复点
    • recovery_target_time (timestamp):这个参数指定恢复到的时间戳
    • recovery_target_xid (string):这个参数指定恢复到的事务 ID
    • recovery_target_inclusive (boolean):指定是否在指定的恢复目标之后停止(true),或者在恢复目标之前停止 (false);适用于recovery_target_time或者recovery_target_xid被指定的情况;这个设置分别控制事务是否有准确的目标提交时间或 ID 是否将被包括在该恢复中;默认值为 true
    • recovery_target_timeline (string):指定恢复到一个特定的时间线
    • recovery_target_action (enum):指定在达到恢复目标时服务器应该立刻采取的动作,包括pause(暂停)、promote(接受连接)、shutdown(停止服务器),其中pause为默认动作
  • 备库参数设置

    • standby_mode(boolean):为on表示作为一个备库,否则不为备库
    • primary_conninfo (string):指定备库连接主库的连接字符串
    • primary_slot_name (string):通过流复制指定主库的一个复制槽来复制主库数据,如果没有设置primary_conninfo,则此参数无效
    • trigger_file (string):指定一个触发器文件,该文件存在可以结束备库的恢复,即升级备库为一个独立的主库
    • recovery_min_apply_delay (integer):这个参数允许将恢复延迟一段固定的时间,如果没有指定单位则以毫秒为单位。

如果recovery.conf中同时指定了recoveryTargetXid、recoveryTargetName、recoveryTargetTime时,PostgreSQL会按照RECOVERY_TARGET_XID> RECOVERY_TARGET_NAME > RECOVERY_TARGET_TIME的优先级来获取最终的目标恢复位点。

如果在recovery.conf指定recovery_targetTimeLine为latest,则可以基于当前TimeLineID为起点寻找最新时间线:

  • 寻找当前TimeLineID的时间线历史文件“XXX.history”,如果存在则继续寻找,否则错误退出
  • TimeLineID是线性增长的,将当前TimeLineID自增1寻找是否存在时间线历史文件,直到不存在对应的时间线历史文件为止,即可找到最新的时间线。

 

归档恢复设置

 

restore_command ( string )
要执行以检索WAL文件系列的归档段的本地shell命令。归档恢复需要此参数,但流复制可选。字符串中的任何 %f 都将替换为要从归档中检索的文件的名称,并且任何 %p 都将替换为服务器上的复制目标路径名。 (路径名相对于当前工作目录,即 集群 的数据目录。)任何 %r 都将替换为包含最后一个有效重新启动点的文件的名称。这是必须保留以允许还原可重新启动的最早文件,因此可以使用此信息将存档截断为支持从当前还原重新启动所需的最小值。 %r 通常仅用于热备份配置(请参阅 Section 26.2 )。写 %% 以嵌入实际的 % 字符。
仅当命令成功时,命令才能返回零退出状态。将要求该命令提供存档中不存在的文件名;当问到这个问题时,它必须返回非零值。例子:


restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"'  # Windows
一个例外是,如果命令被一个信号(SIGTERM除外,它用作数据库服务器关闭的一部分)或shell的错误(例如命令未找到)终止,则恢复将中止,服务器将没有启动。

archive_cleanup_command ( string )
此可选参数指定将在每个重新启动点执行的shell命令。 archive_cleanup_command 的目的是提供一种机制,用于清理备用服务器不再需要的旧存档WAL文件。任何 %r 都将替换为包含最后一个有效重新启动点的文件的名称。这是必须保留的最早文件,以允许恢复可重新启动,因此可以安全地删除早于 %r 的所有文件。此信息可用于将存档截断为支持从当前还原重新启动所需的最小值。 pg_archivecleanup 模块通常在 archive_cleanup_command 中用于单待机配置,例如:

archive_cleanup_command = 'pg_archivecleanup /mnt/server/archivedir %r'
但请注意,如果多个备用服务器从同一归档目录还原,则需要确保在任何服务器不再需要WAL文件之前不要删除它们。 archive_cleanup_command 通常用于热备份配置(请参阅 Section 26.2 )。写 %% 以在命令中嵌入实际的 % 字符。

如果该命令返回非零退出状态,则将写入警告日志消息。例外情况是,如果命令由shell发出信号或错误(例如未找到命令),则会引发致命错误。

recovery_end_command ( string )
此参数指定仅在恢复结束时执行一次的shell命令。此参数是可选的。 recovery_end_command 的目的是提供复制或恢复后清理的机制。任何 %r 都将替换为文件名包含最后一个有效的重启点,如 archive_cleanup_command 。
如果该命令返回非零退出状态,则将写入警告日志消息,并且数据库仍将继续启动。例外情况是,如果命令由shell发出信号或错误(例如未找到命令),则数据库将不会继续启动。

 

恢复目标设置

默认情况下,恢复将恢复到WAL日志的末尾。以下参数可用于指定较早的停止点。最多可以使用 recovery_target , recovery_target_lsn , recovery_target_name , recovery_target_time 或 recovery_target_xid 中的一个;如果在配置文件中指定了多个,则将使用最后一个条目。

recovery_target = 'immediate'
此参数指定一旦达到一致状态,即尽可能早地恢复。从在线备份恢复时,这意味着备份结束的时间点。
从技术上讲,这是一个字符串参数,但 'immediate' 是当前唯一允许的值。

recovery_target_name ( string )
此参数指定要继续进行恢复的命名还原点(使用 pg_create_restore_point() 创建)。
recovery_target_time ( timestamp )
此参数指定恢复将继续执行的时间戳。精确的停止点也受 recovery_target_inclusive 的影响。
recovery_target_xid ( string )
此参数指定将继续进行恢复的事务ID。请记住,虽然事务ID在事务开始时按顺序分配,但事务可以以不同的数字顺序完成。将要恢复的事务是在指定事务之前(并且可选地包括)提交的事务。精确的停止点也受 recovery_target_inclusive 的影响。
recovery_target_lsn ( pg_lsn )
此参数指定要继续进行恢复的预写日志位置的LSN。精确的停止点也受 recovery_target_inclusive 的影响。使用系统数据类型 pg_lsn 解析此参数。
以下选项进一步指定了恢复目标,并影响到达目标时发生的情况:

recovery_target_inclusive ( boolean )
指定是在指定的恢复目标( true )之后,还是在恢复目标( false )之前停止。指定 recovery_target_lsn , recovery_target_time 或 recovery_target_xid 时适用。此设置控制分别具有确切目标WAL位置(LSN),提交时间或事务ID的事务是否将包含在恢复中。默认值为 true 。
recovery_target_timeline ( string )
指定恢复到特定时间轴。默认设置是沿着执行基本备份时的当前时间线恢复。将此设置为 latest 将恢复到存档中找到的最新时间轴,这在备用服务器中很有用。除此之外,您只需要在复杂的重新恢复情况下设置此参数,您需要返回到在时间点恢复后到达的状态。有关讨论,请参见 Section 25.3.5 。
recovery_target_action ( enum )
指定达到恢复目标后服务器应采取的操作。默认值为 pause ,表示恢复将暂停。 promote 表示恢复过程将完成,服务器将开始接受连接。最后 shutdown 将在到达恢复目标后停止服务器。
pause 设置的预期用途是允许对数据库执行查询,以检查此恢复目标是否是最理想的恢复点。可以使用 pg_wal_replay_resume() (参见 Table 9.81 )恢复暂停状态,然后恢复结束。如果此恢复目标不是所需的停止点,则关闭服务器,将恢复目标设置更改为更高的目标,然后重新启动以继续恢复。

shutdown 设置对于在所需的确切重播点准备好实例非常有用。该实例仍然能够重放更多的WAL记录(事实上,自下次启动时的最后一个检查点以来,它必须重放WAL记录)。

请注意,因为 recovery_target_action 设置为 shutdown 时不会重命名 recovery.conf ,所以除非更改配置或手动删除 recovery.conf 文件,否则任何后续启动都将立即关闭。

如果未设置恢复目标,则此设置无效。如果未启用 hot_standby ,则 pause 的设置将与 shutdown 相同。

 

备库参数设置

standby_mode ( boolean )
指定是否将PostgreSQL服务器作为备用服务器启动。如果此参数为 on ,则在到达存档WAL结束时服务器将不会停止恢复,但是将继续尝试通过使用 restore_command 和/或连接到 primary_conninfo 设置指定的主服务器来获取新的WAL段来继续恢复。
primary_conninfo ( string )
指定用于备用服务器与主服务器连接的连接字符串。该字符串采用 Section 34.1.1 中描述的格式。如果此字符串中未指定任何选项,则会检查相应的环境变量(请参阅 Section 34.14 )。如果未设置环境变量,则使用默认值。
连接字符串应指定主服务器的主机名(或地址),以及端口号(如果它与备用服务器的默认值不同)。同时指定与主节点上具有适当特权的角色相对应的用户名(请参阅 Section 26.2.5.1 )。如果主要要求密码验证,也需要提供密码。它可以在 primary_conninfo 字符串中提供,也可以在备用服务器上的单独 ~/.pgpass 文件中提供(使用 replication 作为数据库名称)。不要在 primary_conninfo 字符串中指定数据库名称。

如果 standby_mode 为 off ,则此设置无效。

primary_slot_name ( string )
(可选)指定在通过流复制连接到主节点时使用的现有复制槽,以控制上游节点上的资源删除(请参阅 Section 26.2.6 )。如果未设置 primary_conninfo ,则此设置无效。
trigger_file ( string )
指定其状态在备用数据库中恢复恢复的触发器文件。即使未设置此值,您仍可以使用 pg_ctl promote 升级待机状态。如果 standby_mode 为 off ,则此设置无效。
recovery_min_apply_delay ( integer )
默认情况下,备用服务器会尽快从主服务器恢复WAL记录。拥有时间延迟的数据副本可能很有用,可以提供纠正数据丢失错误的机会。此参数允许您将恢复延迟一段固定的时间,如果未指定单位,则以毫秒为单位。例如,如果将此参数设置为 5min ,则备用数据库将仅在备用数据库上的系统时间超过主服务器报告的提交时间超过五分钟时重播每个事务提交。
服务器之间的复制延迟可能超过此参数的值,在这种情况下不会添加延迟。请注意,延迟是在写入主站的WAL时间戳和备用站上的当前时间之间计算的。由于网络延迟或级联复制配置而导致的传输延迟可能会显着缩短实际等待时间。如果主服务器和备用服务器上的系统时钟不同步,则可能导致恢复应用早于预期的记录;但这不是主要问题,因为此参数的有用设置远大于服务器之间的典型时间偏差。

仅在事务提交的WAL记录上发生延迟。其他记录尽可能快地重放,这不是问题,因为MVCC可见性规则确保在应用相应的提交记录之前它们的效果不可见。

一旦恢复中的数据库达到一致状态,直到备用数据库被提升或触发,就会发生延迟。之后,备用数据库将无需等待即可结束恢复。

此参数适用于流复制部署;但是,如果指定了参数,则在所有情况下都将遵守该参数。 hot_standby_feedback 将因使用此功能而延迟,这可能导致主人膨胀;小心使用。

警告

当 synchronous_commit 设置为 remote_apply 时,同步复制受此设置的影响;每个 COMMIT 都需要等待才能应用。

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部