2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17
开发版本: devel

pg_combinebackup

pg_combinebackup — 从增量备份和依赖备份重建完整备份

概要

pg_combinebackup [选项...] [备份目录...]

描述

pg_combinebackup 用于从 增量备份 和它所依赖的早期备份中重建一个合成的完整备份。

在命令行中按从旧到新的顺序指定所有必需的备份。也就是说,第一个备份目录应为完整备份的路径,最后一个应为您希望恢复的最终增量备份的路径。pg_combinebackup 会将重建的备份写入由 -o 选项指定的输出目录。

pg_combinebackup 会尝试验证您指定的备份是否形成一个合法的备份链,从中可以正确地重建一个完整的备份。但是,它并不是为了帮助您跟踪哪些备份依赖于其他哪些备份。如果您删除了增量备份所依赖的一个或多个早期备份,您将无法恢复它。此外,pg_combinebackup 只尝试验证备份之间是否存在正确的关系,而不验证每个单独备份的完整性;有关这一点,请使用 pg_verifybackup

由于 pg_combinebackup 的输出是一个合成的完整备份,它可以作为未来调用 pg_combinebackup 的输入。合成的完整备份将在命令行中指定,以替代从中重建它的备份链。

选项

-d
--debug

stderr 上打印大量调试日志输出。

-k
--link

使用硬链接而不是将文件复制到合成备份。重建合成备份可能会更快(无需复制文件)并占用更少的磁盘空间,但在使用输出目录时必须小心,因为对该目录的任何修改(例如,启动服务器)也可能影响输入目录。同样,对输入目录的更改(例如,在完整备份上启动服务器)也可能影响输出目录。因此,当输入目录仅为副本且将在 pg_combinebackup 完成后删除时,使用此选项最佳。

要求输入备份和输出目录在同一个文件系统中。

如果备份清单不可用或不包含正确类型的校验和,仍然会创建硬链接,但文件仍将逐块读取以进行校验和计算。

-n
--dry-run

-n/--dry-run 选项指示 pg_combinebackup 在不实际创建目标目录或任何输出文件的情况下找出将要执行的操作。它与 --debug 结合使用特别有用。

-N
--no-sync

默认情况下,pg_combinebackup 会等待所有文件安全写入磁盘。此选项导致 pg_combinebackup 在不等待的情况下返回,这样更快,但这意味着后续的操作系统崩溃可能会导致输出备份损坏。通常,此选项对于测试很有用,但不应用于创建生产环境。

-o outputdir
--output=outputdir

指定应将合成完整备份写入的输出目录。目前,此参数是必需的。

-T olddir=newdir
--tablespace-mapping=olddir=newdir

在备份过程中,将目录 olddir 中的表空间重新定位到 newdirolddir 是表空间在命令行指定的最终备份中存在的绝对路径,而 newdir 是在重建备份中用于表空间的绝对路径。如果任一路径需要包含等号 (=),则在其前面加上反斜杠。此选项可以指定多次以用于多个表空间。

--clone

使用高效的文件克隆(在某些系统上称为““reflinks””)而不是将文件复制到新数据目录,这可以近乎即时地复制数据文件。

如果备份清单不可用或不包含正确类型的校验和,文件克隆将用于复制文件,但文件仍将逐块读取以进行校验和计算。

文件克隆仅在某些操作系统和文件系统上受支持。如果选择了但不支持,pg_combinebackup 运行将出错。目前,它支持 Linux(内核 4.5 或更高版本),使用 Btrfs 和 XFS(在创建时支持 reflink 的文件系统上),以及 macOS(使用 APFS)。

--copy

执行常规文件复制。这是默认行为。(另请参见 --copy-file-range--clone-k/--link。)

--copy-file-range

使用 copy_file_range 系统调用进行高效复制。在某些文件系统上,这会产生与 --clone 类似的结果,共享物理磁盘块,而在其他文件系统上,它仍可能复制块,但通过优化路径进行。目前,它支持 Linux 和 FreeBSD。

如果备份清单不可用或不包含正确类型的校验和,copy_file_range 将用于复制文件,但文件仍将逐块读取以进行校验和计算。

--manifest-checksums=algorithm

pg_basebackup 类似,pg_combinebackup 会在输出目录中写入备份清单。此选项指定应应用于备份清单中包含的每个文件的校验和算法。当前可用的算法为 NONECRC32CSHA224SHA256SHA384SHA512。默认值为 CRC32C

--no-manifest

禁用备份清单的生成。如果未指定此选项,将把重建备份的备份清单写入输出目录。

--sync-method=method

当设置为 fsync(默认值)时,pg_combinebackup 将递归打开并同步备份目录中的所有文件。当使用普通格式时,文件搜索将遵循 WAL 目录和每个已配置表空间的符号链接。

在 Linux 上,还可以使用 syncfs 来要求操作系统同步包含备份目录的整个文件系统。当使用普通格式时,pg_combinebackup 还会同步包含 WAL 文件和每个表空间的upaten系统。有关使用 syncfs 时需要注意的注意事项,请参阅 recovery_init_sync_method

当使用 --no-sync 时,此选项无效。

-V
--version

打印 pg_combinebackup 版本并退出。

-?
--help

显示关于 pg_combinebackup 命令行参数的帮助,然后退出。

局限性

pg_combinebackup 在写入输出目录时不会重新计算页面校验和。因此,如果用于重建的任何备份是在禁用校验和的情况下进行的,但最终备份是在启用校验和的情况下进行的,则生成的目录可能包含校验和无效的页面。

为避免此问题,建议在更改集群的校验和状态后,使用 pg_checksums 创建新的完整备份。否则,您可以禁用然后选择性地重新启用 pg_combinebackup 生成的目录上的校验和,以纠正问题。

环境变量

此实用程序与大多数其他 PostgreSQL 实用程序一样,使用 libpq 支持的环境变量(参见 第 32.15 节)。

环境变量 PG_COLOR 指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

另请参阅

pg_basebackup

提交更正

如果您在文档中发现任何不正确、与您对特定功能的实际体验不符或需要进一步说明的内容,请使用 此表单 报告文档问题。