原创 红石PG 红石PG
2025年04月18日 07:33 陕西
在企业生产环境中,验证数据备份文件的有效性,是保证数据库可靠性的一项关键措施
特性提交日志
pg_verifybackup:验证 tar 格式的备份。这同样适用于已压缩的 tar 格式备份。不过,必须使用
-n选项,因为需要使用pg_waldump来验证预写式日志(WAL),而它目前还不知道如何验证存储在 tar 文件中的 WAL。示例
本次提交解决了
pg_verifybackup工具的一个限制:在当前版本(截至版本 17)中,它只能验证使用pg_basebackup创建的“普通”格式的备份。这意味着,以“tar”或“压缩”格式进行的备份,只有在解包后才能进行验证。从 PostgreSQL 18 开始,这个限制将会被消除。在 PostgreSQL 17 及之前版本中,如果执行以下操作:
pg17 $ pg_basebackup --version
pg_basebackup (PostgreSQL) 17.4
pg17 $ mkdir /var/tmp/dummy
pg17 $ pg_basebackup --checkpoint=fast --format=t --pgdata=/var/tmp/dummy
pg17 $ ls -l /var/tmp/dummy
total 39620
-rw------- 1 postgres postgres 137808 Mar 30 08:36 backup_manifest
-rw------- 1 postgres postgres 23646720 Mar 30 08:36 base.tar
-rw------- 1 postgres postgres 16778752 Mar 30 08:36 pg_wal.tar之后尝试验证备份,就会遇到以下情况:
pg17 $ pg_verifybackup /var/tmp/dummy/
pg_verifybackup: error: "pg_wal.tar" is present on disk but not in the manifest
pg_verifybackup: error: "base.tar" is present on disk but not in the manifest
pg_verifybackup: error: "base/4/3431" is present in the manifest but not on disk
pg_verifybackup: error: "base/5/2620" is present in the manifest but not on disk
pg_verifybackup: error: "base/1/2617" is present in the manifest but not on disk
...
pg_verifybackup: error: "base/1/2682" is present in the manifest but not on disk
pg_waldump: error: could not open directory "/var/tmp/dummy/pg_wal": No such file or directory
pg_waldump: hint: Try "pg_waldump --help" for more information.
pg_verifybackup: error: WAL parsing failed for timeline 1
pg17 $ echo $?
1原因是
pg_verifybackup无法直接检查 tar 文件内容,因此无法验证备份的有效性。从 PostgreSQL 18 开始,情况会有所不同:
pgdev $ pg_basebackup --version
pg_basebackup (PostgreSQL) 18devel
pgdev $ rm -rf /var/tmp/dummy
pgdev $ pg_basebackup --checkpoint=fast --format=t --pgdata=/var/tmp/dummy
pgdev $ pg_verifybackup --no-parse-wal /var/tmp/dummy/
backup successfully verified目前需要使用“
--no-parse-wal”选项,因为内部用于验证预写式日志(WAL)的pg_waldump工具还无法处理压缩或 tar 格式的备份。这个功能对压缩备份同样有效:
pgdev $ rm -rf /var/tmp/dummy/
pgdev $ pg_basebackup --checkpoint=fast --format=t --compress --pgdata=/var/tmp/dummy
pgdev $ pg_basebackup --checkpoint=fast --format=t --compress=5 --pgdata=/var/tmp/dummy
pgdev $ pg_verifybackup --no-parse-wal /var/tmp/dummy/
backup successfully verified很高兴看到又一个限制被消除了。
文章转载自Rhein,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




