pg_combinebackup
pg_combinebackup — 从增量备份及其所依赖的备份重建完整备份
大纲
pg_combinebackup [option...] [backup_directory...]
描述
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不经等待就直接返回,因此速度更快,但这意味着如果随后操作系统崩溃,输出备份可能会损坏。通常,此选项适合测试,但不应用于创建生产环境安装。-ooutputdir--output=#outputdir指定合成完整备份写入的输出目录。当前该参数是必需的。
-Tolddir=newdir--tablespace-mapping=#olddir=newdir在重建备份期间,将目录
olddir中的表空间重定位到newdir。olddir是命令行指定的最终备份中该表空间的绝对路径,newdir是重建备份中要使用的绝对路径。若路径中需要包含等号(=),请在其前加反斜杠。可多次指定此选项以映射多个表空间。--clone#使用高效的文件克隆(某些系统将其称为“reflink”),代替向新数据目录复制文件,这样可能实现几乎瞬时的数据文件复制。
如果备份清单不可用,或者其中不包含正确类型的校验和,仍会使用文件克隆来复制文件,但也会按块读取该文件以计算校验和。
文件克隆仅在某些操作系统和文件系统上受支持。如果选择了该选项,但系统并不支持,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 会在输出目录中写入备份清单。此选项指定对清单中每个文件使用的校验和算法。当前可用算法为
NONE、CRC32C、SHA224、SHA256、SHA384和SHA512。默认值为CRC32C。--no-manifest#禁用备份清单的生成。若未指定该选项,则会将重建备份的清单写入输出目录。
--sync-method=#method当设置为
fsync(这是默认值)时,pg_combinebackup会递归打开并同步备份目录中的所有文件。使用普通文件格式时,搜索文件时会跟随 WAL 目录和每个已配置表空间的符号链接。在 Linux 上,也可以改用
syncfs,让操作系统同步包含备份目录的整个文件系统。使用普通文件格式时,pg_combinebackup还会同步包含 WAL 文件和各表空间的文件系统。关于使用syncfs时需要注意的事项,请参见 recovery_init_sync_method。使用
--no-sync时,此选项无效。-V--version#打印 pg_combinebackup 版本并退出。
-?--help#显示 pg_combinebackup 命令行参数帮助并退出。
限制
pg_combinebackup 在写入输出目录时不会重新计算页面校验和。因此,对于用于重建的某些备份是在禁用校验和时创建的、而最终备份是在启用校验和时创建的这种链,它会拒绝处理:生成的目录将包含校验和无效的页面,集簇一旦读到这些页面就会无法通过校验和验证。在使用 pg_checksums 启用数据校验和之后,请重新创建一次新的完整备份。
相反的情形则可以接受:当最终备份是在禁用校验和时创建的,从较早备份复制而来的过期校验和永远不会被验证。
环境
与大多数其他 PostgreSQL 工具一样,此工具也使用 libpq 支持的环境变量(见第 32.14 节)。
环境变量 PG_COLOR 指定是否在诊断消息中使用颜色。可能的值为 always、auto 和 never。