↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
历史版本PostgreSQL 8.3 已于 2013 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

F.23. pg_standby #

pg_standby 支持创建“温备”数据库服务器。它既是可用于生产环境的程序,也是可定制的模板,便于在有需要时进行特定修改。

pg_standby 设计为一个会等待的 restore_command,而把标准归档恢复转变为温备运行 正需要这样的命令。此外还需要其他配置,服务器的主手册中对此均有 介绍(参见 第 24.4 节)。

pg_standby 的特性包括:

  • 支持用复制或链接方式恢复 WAL 文件

  • 用 C 语言编写,因此移植性很好,易于安装

  • 源代码易于修改,并且专门划分出了若干区域,供你按自身需要修改

  • 已在 Linux 和 Windows 上经过测试

F.23.1. 用法

要配置备库使用 pg_standby,请将以下内容放入其 recovery.conf 配置文件:

restore_command = 'pg_standby archiveDir %f %p %r'
  

其中,archiveDir 是恢复 WAL 段文件时所读取的目录。

pg_standby 命令行的完整语法为:

pg_standby [ option ... ] archivelocation nextwalfile xlogfilepath [ restartwalfile ]
  

在 restore_command 中使用时,应为 nextwalfile 和 xlogfilepath 分别 指定 %f 和 %p 宏,以提供恢复所需的 实际文件和路径。

如果指定了 restartwalfile(通常使用 %r 宏),就会从 archivelocation 中删除逻辑上位于该文件之前的所有 WAL 文件。这样既能尽量减少需要保留的文件数量,又能保留崩溃后重启的能力。如果 archivelocation 是专供此备库使用的临时暂存区,就适合使用此参数;但如果 archivelocation 用作长期 WAL 归档区,就不应使用。

pg_standby 假定 archivelocation 是服务器所属用户可读的目录。如果指定了 restartwalfile(或 -k),archivelocation 目录还必须可写。

表 F.26. pg_standby 选项

选项 默认值 描述
-c yes 使用 cp 或 copy 命令从归档恢复 WAL 文件。
-d no 在 stderr 上打印大量调试日志输出。
-k numfiles 0 从 archivelocation 中删除文件,使归档中当前文件之前保留的 WAL 文件不超过该数量。零(默认值)表示不从 archivelocation 删除任何文件。如果指定了 restartwalfile,此参数将被静默忽略,因为那种指定方式能更准确地确定正确的归档截断点。从 PostgreSQL 8.3 起,此参数的使用已被弃用;指定 restartwalfile 参数更安全也更高效。设置过小可能导致删除备库重启时仍然需要的文件,而设置过大则会浪费归档空间。
-l no 使用 ln 命令从归档恢复 WAL 文件。链接比复制效率更高,但默认方式是复制,因为链接并非在所有场景下都可用。在 Windows 上,此选项使用 mklink 命令提供文件到文件的符号链接。-l 无法用于 Vista 之前的 Windows 版本。
-r maxretries 3 设置复制或链接命令失败时的最大重试次数。每次失败后,会等待 sleeptime * num_retries,以使等待时间逐步递增。因此默认情况下,会先等待 5 秒、10 秒,再等 15 秒,然后才向备库报告失败。这会被解释为恢复结束,备库将据此完全启动。
-s sleeptime 5 设置两次检查待恢复的 WAL 文件是否已出现在归档中之间休眠的秒数(最多 60)。默认设置未必是推荐值;相关讨论请参见 第 24.4 节。
-t triggerfile none 指定一个触发文件,无论下一个 WAL 文件是否可用,该文件的出现都应导致恢复结束。建议使用结构化的文件名,以避免在同一系统上存在多个服务器时混淆究竟要触发的是哪一个;例如 /tmp/pgsql.trigger.5432。
-w maxwaittime 0 设置等待下一个 WAL 文件的最大秒数,超过该时间后恢复将结束,备库将启动。设置为零(默认值)表示无限等待。默认设置未必是推荐值;相关讨论请参见 第 24.4 节。

小心

触发文件的创建权限必须允许 postgres 进程删除该文件,这一点至关重要。通常,最好由 postgres 用户账号来创建该文件。否则,WAL 文件恢复将无法完成,服务器也无法成功重新上线。

注意

不支持 --help,因为 pg_standby 并非为交互式使用而设计(开发和测试期间除外)。

F.23.2. 示例

在 Linux 或 Unix 系统上,可以这样使用:

archive_command = 'cp %p .../archive/%f'

restore_command = 'pg_standby -l -d -s 2 -t /tmp/pgsql.trigger.5442 .../archive %f %p %r 2>>standby.log'
  

这里,归档目录实际位于备库上,因此 archive_command 通过 NFS 访问该目录,但这些文件对备库而言是本地文件(因此可以 使用 ln)。此配置会:

  • 使用 ln 命令从归档恢复 WAL 文件

  • 将调试输出写入 standby.log

  • 每隔 2 秒检查一次下一个 WAL 文件是否可用

  • 仅在名为 /tmp/pgsql.trigger.5442 的触发文件出现时 停止等待

  • 从归档目录中移除不再需要的文件

在 Windows 上,可以使用:

archive_command = 'copy %p ...\\archive\\%f'

restore_command = 'pg_standby -d -s 5 -t C:\pgsql.trigger.5442 ...\archive %f %p %r 2>>standby.log'

注意,需要双写反斜杠的是 archive_command,而 无需双写的是 restore_command。此配置会:

  • 使用 copy 命令从归档恢复 WAL 文件

  • 将调试输出写入 standby.log

  • 每隔 5 秒检查一次下一个 WAL 文件是否可用

  • 仅在名为 C:\pgsql.trigger.5442 的触发文件出现时 停止等待

  • 从归档目录中移除不再需要的文件

由于 Windows 示例在两端都使用 copy,任一服务器或两个服务器都可能通过网络访问归档目录。

F.23.3. 支持的服务器版本

pg_standby 设计为与 PostgreSQL 8.2 及更高版本配合使用。

PostgreSQL 8.3 提供了 %r 宏,用于让 pg_standby 知道需要保留的最后一个文件。使用 PostgreSQL 8.2 时,如果需要清理归档,就必须使用 -k 选项。该选项在 8.3 中仍然可用,但已弃用。

F.23.4. 作者

Simon Riggs

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。