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.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