pgbackrest/pgbackrest
GitHub: pgbackrest/pgbackrest
企业级 PostgreSQL 物理备份与恢复解决方案,支持并行处理、块级增量、多仓库和云存储。
Stars: 3870 | Forks: 334
# pgBackRest
可靠的 PostgreSQL 备份与恢复 ## 弃用通知 TL;DR: pgBackRest 已停止维护。如果您 fork 了 pgBackRest,请为您的项目选择一个新名称。 经过深思熟虑,我决定停止开发 pgBackRest。我做出这个决定并不轻松。在过去的十三年里,pgBackRest 一直是我的热爱项目,我很幸运能在大部分时间里得到企业的赞助,但在众多贡献者的帮助下,为了将 pgBackRest 打造成今天的样子,我也熬过了无数个深夜,牺牲了许多周末的时间。每位开源开发者都深有体会,明白这样一个特殊的项目需要投入多少生活时间。 自从 Crunchy Data 被收购以来,我一直在维护 pgBackRest,并寻找能让我继续这项工作的新职位,但迄今为止并未成功。同样,我争取赞助的努力也远远未达到维持该项目所需的水平。 和所有人一样,我也需要维持生计,而与 pgBackRest 相关的职位范围非常有限。我现在可以考虑更多样化的工作机会,但这些工作不会给我留下时间来处理 pgBackRest,因为该项目需要耗费大量时间进行维护、修复 bug、审查 PR 以及回复 Issue 等等。这甚至还不包括编写新功能的时间,而这才是我真正热爱的事情。与其做得质量低下且断断续续,我认为彻底停止是更明智的选择。 我想象着在未来的某个时刻 pgBackRest 会被 fork,但那将是一个由新维护者接手的新项目,他们需要像我们当年一样重新建立起用户的信任。 再次感谢多年来所有的 pgBackRest 贡献者。很高兴能与大家共事! ## 简介 pgBackRest 是一个可靠的 PostgreSQL 备份与恢复解决方案,能够无缝扩展以应对最大的数据库和工作负载。 pgBackRest [v2.58.0](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.58.0) 是当前的稳定版本。发布说明可在 [Releases](http://www.pgbackrest.org/release.html) 页面获取。 ## 功能特性 ### 并行备份与恢复 压缩通常是备份操作期间的瓶颈,因此 pgBackRest 通过并行处理以及更高效的压缩算法(如 lz4 和 zstd)解决了这个问题。 ### 本地或远程操作 自定义协议允许 pgBackRest 通过 TLS/SSH 以极简的配置在本地或远程执行备份、恢复和归档操作。该协议层还提供了查询 PostgreSQL 的接口,因此永远不需要对 PostgreSQL 进行远程访问,从而增强了安全性。 ### 多仓库 多个仓库允许,例如,配置一个具有较短保留期的本地仓库用于快速恢复,同时配置一个具有较长保留期的远程仓库用于实现冗余和企业范围内的访问。 ### 完整、差异与增量备份(文件级或块级) 支持完整、差异和增量备份。pgBackRest 不受 rsync 时间分辨率问题的影响,使得差异和增量备份更加安全,无需对每个文件进行校验和计算。块级备份仅复制文件中发生更改的部分,从而节省了空间。 ### 备份轮转与归档过期 可以为完整和差异备份设置保留策略,以涵盖任何时间范围。WAL 归档可以针对所有备份进行维护,也可以严格只为最近的备份进行维护。在后一种情况下,使旧备份保持一致性所需的 WAL 将在归档中予以保留。 ### 备份完整性 备份中的每个文件都会计算校验和,并在恢复或验证期间重新检查。备份完成文件复制后,它会一直等待,直到使备份保持一致性所需的每个 WAL 段都到达仓库。 仓库中的备份可以采用与标准 PostgreSQL 集群(包括表空间)相同的格式进行存储。如果禁用压缩并启用硬链接,则可以对仓库中的备份进行快照,并直接在快照上启动 PostgreSQL 集群。这对于以传统方式恢复极其耗时的 TB 级数据库非常有利。 所有操作均利用文件和目录级别的 fsync 以确保持久性。 ### 页面 Checksums 如果启用了 Page Checksums,pgBackRest 将验证在备份期间复制的每个文件的校验和。在完整备份期间会验证所有 Page Checksums,而在差异和增量备份期间则会验证已更改文件的校验和。 验证失败不会停止备份过程,但会在控制台和文件日志中输出警告,详细说明具体是哪些页面的验证失败。 此功能允许在包含数据有效副本的备份过期之前,及早检测出页面级别的损坏。 ### 备份恢复 中断的备份可以从停止的位置恢复执行。已经复制的文件将与清单中的校验和进行比较,以确保完整性。由于此操作可以完全在仓库主机上进行,因此它减少了 PostgreSQL 主机上的负载并节省了时间,因为计算校验和比压缩和重新传输数据更快。 ### 流式压缩与校验和 在将文件复制到仓库期间,会以流式方式执行压缩和校验和计算,无论仓库位于本地还是远程。 如果仓库位于一台单独的仓库主机上,压缩将在 PostgreSQL 主机上执行,文件以压缩格式传输并简单地存储在仓库主机上。当禁用压缩时,会采用较低级别的压缩,以便在将 CPU 开销保持在最低限度的同时有效利用可用带宽。 ### 增量恢复 (Delta Restore) 清单包含备份中每个文件的校验和,因此在恢复期间可以利用这些校验和极大地加快处理速度。在 Delta Restore 期间,首先会删除备份中不存在的文件,然后为剩余文件生成校验和。与备份匹配的文件将被保留在原位,其余文件则照常恢复。并行处理可以显著减少恢复时间。 ### 并行、异步 WAL 推送与获取 包含了用于将 WAL 推送到归档以及从归档获取 WAL 的专用命令。这两个命令都支持并行处理以加速执行过程,并以异步方式运行从而为 PostgreSQL 提供尽可能快的响应时间。 WAL 推送会自动检测被多次推送的 WAL 段并在内容相同时进行去重,否则将引发错误。异步 WAL 推送允许将传输工作卸载给另一个进程,该进程并行压缩 WAL 段以实现最大吞吐量。对于写入量极高的数据库,这可能是一项关键功能。 异步 WAL 获取会维护一个本地 WAL 段队列,这些段已被解压并准备好进行重放。这减少了向 PostgreSQL 提供 WAL 所需的时间,从而最大化重放速度。高延迟连接和存储(如 S3)从中受益最大。 推送和获取命令均通过比较 PostgreSQL 版本和系统标识符来确保数据库和仓库相互匹配。这几乎消除了错误配置 WAL 归档位置的可能性。 ### 表空间与链接支持 完全支持表空间,并且在恢复时可以将表空间重新映射到任何位置。还可以通过单个命令将所有表空间重新映射到一个位置,这对于开发环境的恢复非常有用。 支持 PostgreSQL 集群中任何文件或目录的文件和目录链接。在恢复时,可以将所有链接恢复到其原始位置,重新映射部分或全部链接,或者将部分或全部链接作为集群目录中的普通文件或目录进行恢复。 ### 兼容 S3、Azure 和 GCS 兼容的对象存储 pgBackRest 仓库可以位于 S3、Azure 和 GCS 兼容的对象存储中,从而允许实现几乎无限的容量和保留期。 ### 加密 pgBackRest 可以对仓库进行加密,以保护存储在任意位置的备份的安全。 ### 兼容十个版本的 PostgreSQL pgBackRest 支持十个版本的 PostgreSQL,包括当前受支持的五个版本和已经 EOL (停止维护) 的最后五个版本。这为升级到受支持的版本提供了充足的时间。 ## 入门指南 pgBackRest 力求易于配置和操作: - 面向各种操作系统和 PostgreSQL 版本的[用户指南](http://www.pgbackrest.org/user-guide-index.html)。 - 面向命令行操作的[命令参考](http://www.pgbackrest.org/command.html)。 - 用于创建 pgBackRest 配置的[配置参考](http://www.pgbackrest.org/configuration.html)。 ## 致谢 [Armchair](https://thenounproject.com/icon/armchair-129971) 图像由 [Alexander Skowalsky](https://thenounproject.com/sandorsz) 提供。
可靠的 PostgreSQL 备份与恢复 ## 弃用通知 TL;DR: pgBackRest 已停止维护。如果您 fork 了 pgBackRest,请为您的项目选择一个新名称。 经过深思熟虑,我决定停止开发 pgBackRest。我做出这个决定并不轻松。在过去的十三年里,pgBackRest 一直是我的热爱项目,我很幸运能在大部分时间里得到企业的赞助,但在众多贡献者的帮助下,为了将 pgBackRest 打造成今天的样子,我也熬过了无数个深夜,牺牲了许多周末的时间。每位开源开发者都深有体会,明白这样一个特殊的项目需要投入多少生活时间。 自从 Crunchy Data 被收购以来,我一直在维护 pgBackRest,并寻找能让我继续这项工作的新职位,但迄今为止并未成功。同样,我争取赞助的努力也远远未达到维持该项目所需的水平。 和所有人一样,我也需要维持生计,而与 pgBackRest 相关的职位范围非常有限。我现在可以考虑更多样化的工作机会,但这些工作不会给我留下时间来处理 pgBackRest,因为该项目需要耗费大量时间进行维护、修复 bug、审查 PR 以及回复 Issue 等等。这甚至还不包括编写新功能的时间,而这才是我真正热爱的事情。与其做得质量低下且断断续续,我认为彻底停止是更明智的选择。 我想象着在未来的某个时刻 pgBackRest 会被 fork,但那将是一个由新维护者接手的新项目,他们需要像我们当年一样重新建立起用户的信任。 再次感谢多年来所有的 pgBackRest 贡献者。很高兴能与大家共事! ## 简介 pgBackRest 是一个可靠的 PostgreSQL 备份与恢复解决方案,能够无缝扩展以应对最大的数据库和工作负载。 pgBackRest [v2.58.0](https://github.com/pgbackrest/pgbackrest/releases/tag/release/2.58.0) 是当前的稳定版本。发布说明可在 [Releases](http://www.pgbackrest.org/release.html) 页面获取。 ## 功能特性 ### 并行备份与恢复 压缩通常是备份操作期间的瓶颈,因此 pgBackRest 通过并行处理以及更高效的压缩算法(如 lz4 和 zstd)解决了这个问题。 ### 本地或远程操作 自定义协议允许 pgBackRest 通过 TLS/SSH 以极简的配置在本地或远程执行备份、恢复和归档操作。该协议层还提供了查询 PostgreSQL 的接口,因此永远不需要对 PostgreSQL 进行远程访问,从而增强了安全性。 ### 多仓库 多个仓库允许,例如,配置一个具有较短保留期的本地仓库用于快速恢复,同时配置一个具有较长保留期的远程仓库用于实现冗余和企业范围内的访问。 ### 完整、差异与增量备份(文件级或块级) 支持完整、差异和增量备份。pgBackRest 不受 rsync 时间分辨率问题的影响,使得差异和增量备份更加安全,无需对每个文件进行校验和计算。块级备份仅复制文件中发生更改的部分,从而节省了空间。 ### 备份轮转与归档过期 可以为完整和差异备份设置保留策略,以涵盖任何时间范围。WAL 归档可以针对所有备份进行维护,也可以严格只为最近的备份进行维护。在后一种情况下,使旧备份保持一致性所需的 WAL 将在归档中予以保留。 ### 备份完整性 备份中的每个文件都会计算校验和,并在恢复或验证期间重新检查。备份完成文件复制后,它会一直等待,直到使备份保持一致性所需的每个 WAL 段都到达仓库。 仓库中的备份可以采用与标准 PostgreSQL 集群(包括表空间)相同的格式进行存储。如果禁用压缩并启用硬链接,则可以对仓库中的备份进行快照,并直接在快照上启动 PostgreSQL 集群。这对于以传统方式恢复极其耗时的 TB 级数据库非常有利。 所有操作均利用文件和目录级别的 fsync 以确保持久性。 ### 页面 Checksums 如果启用了 Page Checksums,pgBackRest 将验证在备份期间复制的每个文件的校验和。在完整备份期间会验证所有 Page Checksums,而在差异和增量备份期间则会验证已更改文件的校验和。 验证失败不会停止备份过程,但会在控制台和文件日志中输出警告,详细说明具体是哪些页面的验证失败。 此功能允许在包含数据有效副本的备份过期之前,及早检测出页面级别的损坏。 ### 备份恢复 中断的备份可以从停止的位置恢复执行。已经复制的文件将与清单中的校验和进行比较,以确保完整性。由于此操作可以完全在仓库主机上进行,因此它减少了 PostgreSQL 主机上的负载并节省了时间,因为计算校验和比压缩和重新传输数据更快。 ### 流式压缩与校验和 在将文件复制到仓库期间,会以流式方式执行压缩和校验和计算,无论仓库位于本地还是远程。 如果仓库位于一台单独的仓库主机上,压缩将在 PostgreSQL 主机上执行,文件以压缩格式传输并简单地存储在仓库主机上。当禁用压缩时,会采用较低级别的压缩,以便在将 CPU 开销保持在最低限度的同时有效利用可用带宽。 ### 增量恢复 (Delta Restore) 清单包含备份中每个文件的校验和,因此在恢复期间可以利用这些校验和极大地加快处理速度。在 Delta Restore 期间,首先会删除备份中不存在的文件,然后为剩余文件生成校验和。与备份匹配的文件将被保留在原位,其余文件则照常恢复。并行处理可以显著减少恢复时间。 ### 并行、异步 WAL 推送与获取 包含了用于将 WAL 推送到归档以及从归档获取 WAL 的专用命令。这两个命令都支持并行处理以加速执行过程,并以异步方式运行从而为 PostgreSQL 提供尽可能快的响应时间。 WAL 推送会自动检测被多次推送的 WAL 段并在内容相同时进行去重,否则将引发错误。异步 WAL 推送允许将传输工作卸载给另一个进程,该进程并行压缩 WAL 段以实现最大吞吐量。对于写入量极高的数据库,这可能是一项关键功能。 异步 WAL 获取会维护一个本地 WAL 段队列,这些段已被解压并准备好进行重放。这减少了向 PostgreSQL 提供 WAL 所需的时间,从而最大化重放速度。高延迟连接和存储(如 S3)从中受益最大。 推送和获取命令均通过比较 PostgreSQL 版本和系统标识符来确保数据库和仓库相互匹配。这几乎消除了错误配置 WAL 归档位置的可能性。 ### 表空间与链接支持 完全支持表空间,并且在恢复时可以将表空间重新映射到任何位置。还可以通过单个命令将所有表空间重新映射到一个位置,这对于开发环境的恢复非常有用。 支持 PostgreSQL 集群中任何文件或目录的文件和目录链接。在恢复时,可以将所有链接恢复到其原始位置,重新映射部分或全部链接,或者将部分或全部链接作为集群目录中的普通文件或目录进行恢复。 ### 兼容 S3、Azure 和 GCS 兼容的对象存储 pgBackRest 仓库可以位于 S3、Azure 和 GCS 兼容的对象存储中,从而允许实现几乎无限的容量和保留期。 ### 加密 pgBackRest 可以对仓库进行加密,以保护存储在任意位置的备份的安全。 ### 兼容十个版本的 PostgreSQL pgBackRest 支持十个版本的 PostgreSQL,包括当前受支持的五个版本和已经 EOL (停止维护) 的最后五个版本。这为升级到受支持的版本提供了充足的时间。 ## 入门指南 pgBackRest 力求易于配置和操作: - 面向各种操作系统和 PostgreSQL 版本的[用户指南](http://www.pgbackrest.org/user-guide-index.html)。 - 面向命令行操作的[命令参考](http://www.pgbackrest.org/command.html)。 - 用于创建 pgBackRest 配置的[配置参考](http://www.pgbackrest.org/configuration.html)。 ## 致谢 [Armchair](https://thenounproject.com/icon/armchair-129971) 图像由 [Alexander Skowalsky](https://thenounproject.com/sandorsz) 提供。
标签:DBA运维, DNS解析, pgBackRest, PostgreSQL, 企业级数据解决方案, 关系型数据库, 备份还原, 大规模数据库, 存储管理, 安全测试工具, 客户端加密, 开源项目, 数据库备份, 数据库维护, 数据恢复, 测试用例, 系统容灾, 高可用性