2024 年 9 月 26 日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13
开发版本:devel

pg_verifybackup

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

概要

pg_verifybackup [选项...]

描述

pg_verifybackup 用于检查使用 pg_basebackup 创建的数据库集群备份的完整性,并与服务器在备份时生成的 backup_manifest 进行比较。备份必须存储在“普通”格式中;“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

提交更正

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