支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel

pg_verifybackup

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

概要

pg_verifybackup [选项...]

描述

pg_verifybackup 用于检查使用 pg_basebackup 获取的数据库集群备份的完整性,并与服务器在备份时生成的 backup_manifest 进行比较。备份必须以“plain”格式存储;提取后可以检查“tar”格式的备份。

请务必注意,pg_verifybackup 执行的验证不包括且不能包括运行服务器在尝试使用备份时将执行的所有检查。即使您使用此工具,您仍然应该执行测试恢复,并验证生成的数据库是否按预期工作,以及它们是否包含正确的数据。但是,pg_verifybackup 可以检测到许多因存储问题或用户错误而经常发生的问题。

备份验证分四个阶段进行。首先,pg_verifybackup 读取 backup_manifest 文件。如果该文件不存在、无法读取、格式错误、与备份目录的 pg_control 的系统标识符不匹配或未能通过其自身的内部校验和验证,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 文件的服务器版本。

选项

pg_verifybackup 接受以下命令行参数

-e
--exit-on-error

一旦检测到备份问题,立即退出。如果未指定此选项,pg_verifybackup 即使在检测到问题后仍将继续检查备份,并将报告检测到的所有问题作为错误。

-i 路径
--ignore=路径

当比较备份中实际存在的数据文件列表与 backup_manifest 文件中列出的数据文件列表时,忽略指定的文件目录,该文件或目录应表示为相对路径名。如果指定了目录,则此选项会影响以该位置为根的整个子树。如果相对路径名与指定的路径名匹配,则会抑制有关额外文件、丢失文件、文件大小差异或校验和不匹配的抱怨。此选项可以指定多次。

-m 路径
--manifest-path=路径

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

-n
--no-parse-wal

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

-P
--progress

启用进度报告。启用此功能将在验证校验和时提供进度报告。

此选项不能与 --quiet 选项一起使用。

-q
--quiet

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

-s
--skip-checksums

不要验证数据文件校验和。仍然会检查文件的存在与否以及这些文件的大小。这要快得多,因为不需要读取文件本身。

-w 路径
--wal-directory=路径

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

还有其他选项可用

-V
--version

打印 pg_verifybackup 版本并退出。

-?
--help

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

示例

创建位于 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

另请参阅

pg_basebackup

提交更正

如果您在文档中看到任何不正确、与您使用特定功能的体验不符或需要进一步澄清的内容,请使用此表格来报告文档问题。