pg_verifybackup — 验证 PostgreSQL 集群的基本备份的完整性
pg_verifybackup
[选项
...]
pg_verifybackup 用于检查使用 pg_basebackup
对数据库集群备份的完整性,并针对服务器在备份时生成的 backup_manifest
进行检查。备份必须存储在“普通”格式中;提取“tar”格式备份后可以对其进行检查。
请务必注意,pg_verifybackup 执行的验证不包括且无法包括运行服务器在尝试使用备份时将执行的每次检查。即使您使用此工具,您仍应执行测试还原并验证生成的数据库按预期工作且似乎包含正确的数据。但是,pg_verifybackup 可以检测到由于存储问题或用户错误而常见的一些问题。
备份验证分四个阶段进行。首先,pg_verifybackup
读取 backup_manifest
文件。如果该文件不存在、无法读取、格式错误或无法通过其自身内部校验和进行验证,pg_verifybackup
将终止并显示致命错误。
其次,pg_verifybackup
将尝试验证当前存储在磁盘上的数据文件与服务器打算发送的数据文件完全相同,但有一些例外情况,如下所述。它将检测到多余和丢失的文件,但有一些例外情况。此步骤将忽略 postgresql.auto.conf
、standby.signal
和 recovery.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 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 命令行参数的帮助,并退出。
若要创建 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