Postgresql 中文操作指南

pg_verifybackup

pg_verifybackup — 验证 PostgreSQL 集群的基准备份的完整性

Synopsis

pg_verifybackup [ option …​]

Description

pg_verifybackup 用于检查使用 pg_basebackup 生成的 backup_manifest 拍摄的数据库集群备份的完整性,服务器在备份时生成了该 backup_manifest 。备份必须存储在“普通”格式中;提取“tar”格式备份后可以检查该备份。

请务必注意,pg_verifybackup 所执行的验证不包括也不可能包括当尝试使用备份时由运行的服务器执行的每一次检查。即使您使用该工具,您仍应该执行测试恢复并验证生成的数据库是否按预期工作,以及其是否好像包含正确的数据。然而,pg_verifybackup 可以检测到通常因存储问题或用户错误而发生的一些问题。

备份验证按照四个阶段进行。首先, pg_verifybackup 会读取 backup_manifest 文件。如果该文件不存在、无法读取、格式错误或验证不通过其自身的内部校验和,则 pg_verifybackup 将终止并附带一个致命错误。

其次, pg_verifybackup 将尝试验证当前存储在磁盘上的数据文件与服务器打算发送的数据文件完全相同,但存在一些例外情况如下所述。将检测到多余和丢失的文件,但有一些例外情况。此步骤将忽略 postgresql.auto.confstandby.signalrecovery.signal 的存在、不存在或任何修改,因为预计这些文件可能已作为备份过程的一部分创建或修改。它也不会对目标目录中的 backup_manifest 文件或 pg_wal 内的任何内容发出警告,即使这些文件未列在备份清单中。只检查文件;除了间接验证外,不验证目录的存在或不存在:如果一个目录丢失了,那么它应该包含的任何文件也必须丢失。

接下来, pg_verifybackup 将对所有文件进行校验和,将校验和与清单中的值进行比较,并针对计算的校验和与存储在清单中的校验和不匹配的任何文件发出错误。此步骤不会针对前一步中产生错误的任何文件执行,因为已知它们有问题。在该步骤中也忽略了前一步中忽略的文件。

最后, pg_verifybackup 将使用清单验证恢复该备份所需的预写式日志记录是否存在,以及是否可以读取和解析它们。 backup_manifest 包含有关将需要哪些预写式日志记录的信息, pg_verifybackup 将使用该信息来调用 pg_waldump 以解析那些预写式日志记录。将使用 —​quiet 标志,以便 pg_waldump 只报告错误,而不产生任何其他输出。虽然此验证级别足以检测明显的错误,例如丢失一个文件或内部校验和不匹配的文件,但它们不够深入以检测尝试恢复时可能发生的每一个可能的问题。例如,生成内部校验和正确但指定了无意义操作的预写式日志记录的服务器错误无法通过此方法检测。

请注意,如果存在不必要来恢复该备份的额外 WAL 文件,此工具不会检查它们,尽管可以出于此目的单独调用 pg_waldump 。另请注意,WAL 验证与版本相关:您必须使用 pg_verifybackup 版本和 pg_waldump 版本,它们与正在检查的备份相关。相比之下,数据文件完整性检查应该适用于生成 backup_manifest 文件的任何服务器版本。

Options

pg_verifybackup 接受以下命令行参数:

  • -e_—​exit-on-error_

    • 在检测到备份时出现问题后立即退出。如果未指定此选项,则 pg_verifybackup 将在检测到问题后继续检查备份,并将检测到所有问题报告为错误。

  • -i _path—​ignore=_path

    • 比较实际存在于备份中的数据文件列表与 backup_manifest 文件中列出的文件列表时,忽略指定的文件或目录,该文件或目录应表达为相对路径名称。如果指定了一个目录,此选项将影响以该位置为根的整个子树。如果相对路径名称与指定的路径名称匹配,将禁止发出有关多余的文件、丢失的文件、文件大小差异或校验和不匹配的警告。此选项可以多次指定。

  • -m _path—​manifest-path=_path

    • 使用指定路径处的清单文件,而不是一个位于备份目录根处的文件。

  • -n_—​no-parse-wal_

    • 不要尝试解析此备份恢复所需的预写式日志记录数据。

  • -P_—​progress_

    • 启用进度报告。启用此选项将在验证校验和期间提供进度报告。

    • 此选项不能与 —​quiet 选项一起使用。

  • -q_—​quiet_

    • 在成功验证备份时不打印任何内容。

  • -s_—​skip-checksums_

    • 不要验证数据文件校验和。仍将检查文件的出现或不存在以及大小。此方法快得多,因为不需要读取文件本身。

  • -w _path—​wal-directory=_path

    • 尝试解析存储在指定目录中的 WAL 文件,而不是存储在 pg_wal 中。如果备份存储在 WAL 存档的独立位置,则这可能很有用。

还可以使用其他选项:

  • -V_—​version_

    • 打印 pg_verifybackup 的版本并退出。

  • -?_—​help_

    • 显示有关 pg_verifybackup 命令行参数的帮助,然后退出。

Examples

若要创建服务器的基本备份,请使用 mydbserver 并验证备份的完整性:

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$ pg_verifybackup /usr/local/pgsql/data

若要创建服务器的基本备份,请使用 mydbserver ,将清单文件移动到备份目录之外,并验证备份:

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/backup1234
$ mv /usr/local/pgsql/backup1234/backup_manifest /my/secure/location/backup_manifest.1234
$ pg_verifybackup -m /my/secure/location/backup_manifest.1234 /usr/local/pgsql/backup1234

若要在忽略手动添加到备份目录的文件以及跳过校验和验证的情况下验证备份:

$ pg_basebackup -h mydbserver -D /usr/local/pgsql/data
$ edit /usr/local/pgsql/data/note.to.self
$ pg_verifybackup --ignore=note.to.self --skip-checksums /usr/local/pgsql/data

See Also