PG 13新特性之pg_verifybackup

0    233    1

Tags:

👉 本文共约5148个字,系统预计阅读时间或需20分钟。

简介

PG13版本引入两个特性来增强备份的验证:backup manifests (备份清单)和 pg_verifybackup。

  • backup manifests:使用 pg_basebackup 列出物理备份获取的内容。backup_manifest是json格式的,里边存放有每个文件的Checksum-Algorithm以及校验值,以及Timeline信息等。
    • pg_verifybackup:根据备份清单检查备份的完整性。

PG 13新增视图pg_stat_progress_basebackup来追踪查询流式备份的进度; 查询pg_stat_progress_basebackup视图可以获取流式基础备份的进度信息

这将返回一个结果集,显示当前正在进行的流式基础备份的进度。

PG 13新增视图pg_stat_progress_analyze来获取ANALYZE命令的进度信息:

这将返回一个结果集,显示当前正在进行的ANALYZE命令的进度。

一、backup manifests (备份清单)

备份清单是在使用pg_basebackup创建完整物理备份时创建的。

可以用pg_basebackup命令的参数--no-manifest来禁止生成backup_manifest文件pg_basebackup执行时,可以指定Checksum,Checksum值包括SHA224, SHA256, SHA384, SHA512, CRC32C. CRC32C 是默认值,比如改成SHA512,见如下参数:pg_basebackup --manifest-checksums=SHA512

1、pg_basebackup

pg_basebackup - 物理备份的工具

backup manifest 相关选项:

2、内容

备份完成后在目标目录下会存在backup_manifest文件,一个JSON格式的对象:

  • PostgreSQL-Backup-Manifest-Version: 清单的版本
  • Files: 备份中包含的文件列表,以及每个文件的相对路径,来自 PGDATA 和重要的元数据,例如大小、最后修改时间和校验和
  • WAL-Ranges: 时间线、备份开始的LSN、备份结束的LSN等信息
  • Manifest-Checksum: 清单文件的校验和

二、pg_verifybackup

pg_verifybackup - 验证备份完整性的工具

根据pg_basebackup进行备份时生成的backup_manifest进行检查。

  • plain 格式
  • tar 格式:解压后才能进行验证

常用选项:

三、测试用例

原数据目录:
image.png

情况一:不备份wal、plain

1)备份

image.png

2)验证

情况二:wal、plain

1)备份

image.png

image.png

2)验证

情况三:wal、tar

1)备份

image.png

四、原理

src/bin/pg_verifybackup/pg_verifybackup.c

pg_verifybackup 检查备份完整的步骤:

1、检查备份目录

  • 忽略backup_manifest文件
  • 忽略pg_wal目录,通过单独的机制验证
  • 忽略postgresql.auto.conf, recovery.signal, 和standby.signal文件,这些文件可能会在pg_basebackup时创建会更改

2、查找并读取backup_manifest文件

解析backup_manifest文件时遇到的任何错误都视为FATAL

默认情况下在备份目录中查找,使用-m, --manifest-path=PATH可以指定清单的位置

parse_manifest_file() - 解析清单文件,创建一个hash树 --> json_parse_manifest() - 解析JSON格式的清单文件 —>

-->1)pg_parse_json() - 实际的JSON解析器

-->2)verify_manifest_checksum() - 验证清单文件的校验和。清单文件的最后一行被排除在清单校验和之外,因为最后一行应该包含覆盖文件其余部分的校验和。

3、扫描备份目录的文件

backup_manifest上的记录的文件和磁盘上的文件进行比较,如果存在且size也匹配的话,则会在清单的相应文件条目设置matched标志。

没有设置标志的则是manifest上提单的但是备份目录中不存在的

verify_backup_directory - 扫描备份目录,遍历备份目录下每一个文件

-->1)verify_backup_file() - 是目录:递归调用verify_backup_directory();

-->2)manifest_files_lookup() - 检查清单哈希中是否有条目,为NULL,则报错提示“XXX is present on disk but not in the manifest”

-->3)检查 size 是否匹配

report_extra_backup_files() - 扫描哈希表中未设置“匹配”标志的条目,报错提示“XXX is present in the manifest but not on disk”

4、验证文件的 checksum

这个步骤需要花费较大的代价

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复