pg_probackup: PostgreSQL 的备份和恢复管理器

四月 12, 2024

摘要pg_probackup是一个用于管理 PostgreSQL 数据库集群的备份和恢复的实用工具。

目录

描述

pg_probackup是一个用于管理 PostgreSQL 数据库集群的备份和恢复的实用工具。它旨在执行 PostgreSQL 实例的定期备份,使您能够在发生故障时恢复服务器。pg_probackup 支持 PostgreSQL 11 或更高版本。

概述

与其他备份解决方案相比,pg_probackup 具有以下优势,可帮助您实施不同的备份策略和处理大量数据:

  • 增量备份:支持三种不同的增量模式,您可以根据自己的数据流规划备份策略。与进行全量备份相比,增量备份允许您节省磁盘空间并加快备份速度。通过应用增量备份还原实例也比重放 WAL 文件更快。
  • 增量还原:通过重用数据目录中有效的未更改页面,来加快从备份还原的速度。
  • 备份有效性验证:数据一致性自动检查,和按需的备份有效性验证,无需进行实际数据恢复。
  • 实例数据验证:使用 checkdb 命令对 PostgreSQL 实例进行按需验证。
  • 保留:根据保留策略,管理 WAL 归档和备份。您可以根据恢复时间或要保留的备份数,配置保留策略,也可以对一个特定的备份指定生存时间 (TTL)。过期的备份可以合并或删除。
  • 并行化:在多个线程上并行运行备份还原合并删除验证检查数据库的进程。
  • 压缩:采用压缩形态存储备份数据,以节省磁盘空间。
  • 重复数据删除:如果一些非数据文件(如_vm_fsm),自先前的备份复制到增量备份队列中后,未发生更改,就可以从增量备份中排除这些文件,来节省磁盘空间。
  • 远程操作:备份位于远程系统上的 PostgreSQL 实例,或远程恢复备份。
  • 从备用服务器备份:通过从备用服务器进行备份,来避免给主服务器带来额外负载。
  • 外部目录:备份位于 PostgreSQL 数据目录(PGDATA)之外的文件和目录,例如脚本、配置文件、日志或 SQL 转储文件。
  • 备份清单:以纯文本或 JSON 格式,获取备份列表和相应的元数据信息。
  • 归档清单:以纯文本或 JSON 格式,获取所有 WAL 时间线的列表和相应的元数据信息。
  • 部分还原:仅还原指定的数据库。
  • 追赶:为落后的备用服务器克隆一个 PostgreSQL 实例,以“赶上”主服务器。

要管理备份数据,pg_probackup 会创建一个备份清单。这是一个目录,用于存储所有备份文件和其他元数据信息,以及用于时间点恢复所需的 WAL 存档。您可以在单个备份目录下的单独子目录中,存储不同实例的备份。

使用 pg_probackup,您可以进行全量备份或增量备份:

  • FULL 备份包含还原数据库集群所需的所有数据文件。
  • 增量备份在页面级别进行,仅存储自上次备份以来已更改的数据。与进行全量备份相比,它允许您节省磁盘空间,并加快备份过程。通过应用增量备份还原实例,也比重放 WAL 文件更快。pg_probackup 支持以下增量备份模式:
    • DELTA 备份。在此模式下,pg_probackup 读取数据目录中的所有数据文件,并仅复制自上次备份以来已更改的页面。此模式会产生相当于一次全量备份的只读 I/O 压力。
    • PAGE 备份。在此模式下,pg_probackup 扫描自上次全量备份或增量备份的时间起,归档中出现的所有 WAL 文件。新创建的备份仅包含 WAL 记录中提到的页面。这要求自上次备份以来的所有 WAL 文件都存在于 WAL 归档中。如果这些文件的大小与数据库集群的总大小相当,则加速较小,但备份占用的空间仍然要小。您必须按照“设置连续 WAL 归档”中所述配置好 WAL 归档,以进行 PAGE 备份。
    • PTRACK 备份。在这种模式下,PostgreSQL 会动态跟踪页面更改。连续归档不是运行的必要条件。每次更新关系页时,都会在一个特殊的 PTRACK 位图中标记此页。跟踪会给数据库服务器操作带来一些小开销,但会显著加快增量备份的速度。

pg_probackup 只能进行在线的物理备份,而在线备份需要 WAL 才能实现一致的恢复。因此,无论选择哪种备份模式(FULL、PAGE 或 DELTA),使用 pg_probackup 进行的任何备份,都必须使用下面一种 WAL 传输模式

  • ARCHIVE:此类备份依赖于连续归档,来确保一致的恢复。这是默认的 WAL 传输模式。
  • STREAM:此类备份会包含将集群还原到备份时的一致状态所需的所有文件。无论是否设置了连续归档,都会在备份期间通过复制协议,流式传输为一致恢复所需的 WAL 段,并包含在备份文件中。这就是为什么这种备份被称为自治备份或独立备份的原因。

限制

pg_probackup目前有以下限制:

  • pg_probackup 仅支持 PostgreSQL 9.5 及更高版本。
  • Windows 系统上不支持远程模式。
  • 在 Unix 系统上,对于 PostgreSQL 11,备份只能由启动 PostgreSQL 服务器的同一操作系统用户运行。例如,如果 PostgreSQL 服务器由用户postgres启动,则也必须以用户postgres来运行backup命令。要在使用 SSH 以远程模式进行备份时满足此要求,必须指定--remote-user选项为postgres
  • 对于 PostgreSQL 9.5,只有当备份角色是超级用户时,才能执行函数pg_create_restore_point(text)pg_switch_xlog(),因此以非超级用户角色备份 WAL 流量低的实例,可能会比用超级用户角色备份相同实例花费更长时间。
  • 备份的目标 PostgreSQL 服务器和还原的服务器,必须在 block_sizewal_block_size 参数上兼容,并且具有相同的主版本号。根据集群配置,PostgreSQL 本身可能还会存在其他限制,例如 CPU 架构或 libc/icu 版本。