命令行工具
pgmoneta/pgmoneta avatar
pgmoneta/pgmoneta

pgmoneta 0.21:用 C 语言为 PostgreSQL 打造的全量、增量与 WAL 备份方案

PostgreSQL 的备份/恢复解决方案。它支持完整备份和增量备份、时间点恢复、WAL 传送、热备用、压缩、加密、TLS 和 Prometheus 操作界面。

316 个 Star118 个 ForkCBSD-3-Clause

秒懂

它是什么?
pgmoneta 是一个用 C 语言实现的 PostgreSQL 备份恢复工具,支持全量、增量备份、WAL 流式传输、压缩加密和 Prometheus 监控。本文分析其机制、安装方式与适用边界,帮助工程师判断是否值得引入。
适合谁用?
pgmoneta 适合那些需要统一管理多个 PostgreSQL 实例、且重视备份链路完整性的运维团队,尤其是已经使用 PGDG 仓库的 RPM 系环境。它不适合需要图形化界面或不愿接触命令行配置的团队,也不适合对 PostgreSQL 版本有严格向前兼容要求的场景,因为增量备份和表空间支持都依赖特定版本。
能商用吗?
可以。BSD-3-Clause 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 1 天前。
用什么语言写的?
主要是 C(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题:备份链路的完整闭环

PostgreSQL 的备份工具很多,但大多只覆盖全量备份或 WAL 归档的某一段。pgmoneta 试图把全量备份、增量备份、WAL 流式传输、时间点恢复、热备和监控都收进一个守护进程里。它的目标用户是那些需要在一个地方管理多个集群的运维工程师,而不是只想偶尔导一次数据的开发人员。README 提到它支持全量备份和表空间,增量备份则限定在 PostgreSQL 14 以上,表空间支持要到 17 以上。这个版本门槛意味着,如果你的生产库还停留在 13 或更早,增量功能就是不可用的。

机制与架构:进程模型加共享内存

pgmoneta 的架构文档里写得很清楚,它采用进程模型,进程之间通过共享内存通信,网络交互依赖 libev,状态跟踪用 C11 的原子操作。这种设计在 C 语言的后台服务里很常见,好处是崩溃隔离性比多线程模型好,一个 worker 挂了不至于拖垮整个进程。它有一个 worker pool 来加速备份、恢复、删除和验证操作,这暗示了操作是并行执行的。WAL 流式传输是独立于备份的,它会持续接收 WAL 段,这样即使备份间隔拉长,也能保证数据冗余接近实时。不过文档没有说明 WAL 流和备份之间如何协调,比如恢复时如何合并增量链,这部分需要查阅更详细的架构文档。

安装与配置:一条命令装好,但依赖不少

对于 Fedora、RHEL、Rocky Linux 和 AlmaLinux,pgmoneta 直接提供 PGDG 仓库的预编译包。安装命令很直接,先装 PGDG 的 repo RPM,再 dnf install -y pgmoneta。README 特别强调 pgmoneta 不依赖 PostgreSQL 的二进制文件,这意味着它可以在单独的机器上运行,不必和数据库实例同居一机。如果从源码编译,依赖列表很长:clang/gcc、cmake、libev、OpenSSL、zlib、zstd、lz4、bzip2、systemd、libssh、libarchive,还有生成 man page 的 rst2man。编译步骤是标准的 cmake 流程,debug 构建需要把配置里的 log_level 设为 debug5。对于不想碰源码的用户,RPM 包是更省事的选择,但前提是你的发行版在测试列表里,文档列出的平台包括 Fedora 42+、RHEL 10.x、Rocky Linux 10.x、AlmaLinux 10.x,还有 FreeBSD 和 OpenBSD。

功能亮点:压缩、加密、热备和监控

pgmoneta 的备份支持四种压缩算法:gzip、zstd、lz4 和 bzip2,这覆盖了从高压缩比到高速度的不同需求。AES 加密用于静态备份,TLS 1.2+ 用于客户端和服务器连接,这两层合起来保证了传输和存储的安全。热备功能可以保留一份温副本,这在文档里描述为 ready,但不是完整的流复制副本。Prometheus 指标端点和 Web 控制台让运维能直接看到备份状态,不用登录服务器敲命令。远程管理支持 pgmoneta-cli 和 pgmoneta-mcp,后者允许用自然语言交互,这算是比较新的尝试,但文档没有给出具体的 MCP 使用示例,实际效果需要自己验证。

局限与陷阱:版本绑定和运维复杂度

最明显的限制是增量备份要求 PostgreSQL 14+,表空间支持要 17+,如果你的集群版本混杂,备份策略就得按版本分拆。另一个问题是配置复杂度,README 只给了安装步骤,配置文件的具体键值需要看 CONFIGURATION.md,但文档没有列出默认配置项,这意味着初次上手需要额外阅读。离线检测功能能发现不可达的实例,但它依赖网络可达性,如果网络分区导致误报,可能触发不必要的告警。另外,pgmoneta 使用用户 vault 管理 PostgreSQL 凭据,这增加了安全层级,但也意味着你需要额外维护 vault 的访问权限。对于小型单实例环境,这些功能可能显得过重。

替代方案:pgBackRest 的差异

提到 PostgreSQL 备份,绕不开 pgBackRest。pgBackRest 同样支持全量、增量和 WAL 归档,但它的设计哲学不同:pgBackRest 使用独立的 repository 目录,备份是 push 模式,而 pgmoneta 看起来更偏向 pull 模式,由守护进程主动连接数据库获取数据。pgmoneta 的 README 没有直接对比,但从架构看,它集成了 Prometheus 和 MCP,这是 pgBackRest 不具备的。pgBackRest 的配置是单一的 ini 文件,而 pgmoneta 强调守护进程和 worker pool,更适合作为常驻服务运行。如果你的团队已经熟悉 pgBackRest 的 push 模式,迁移到 pgmoneta 需要调整备份触发方式。

维护与升级成本:活跃但需自证

项目最近一次提交是 2026 年 4 月,版本 0.21.0,说明开发仍在进行。0.20.0 在 2026 年 1 月,0.19.1 在 2025 年 8 月,节奏大约是几个月一个 minor 版本,这对一个 0.x 项目来说算活跃。但 0.x 版本意味着 API 和配置格式可能变化,升级时不能指望向后兼容。许可证是 BSD-3-Clause,这是宽松许可证,商业使用和修改都没有太多限制,但代码里如果引用了其他库,需要注意各自许可证。文档提供了 PDF 版本,这有助于离线阅读,但更新是否及时需要看发布记录。维护成本主要在于:版本升级要测试备份链路的兼容性,尤其是增量链的格式变化。

编辑结论

pgmoneta 适合那些需要统一管理多个 PostgreSQL 实例、且重视备份链路完整性的运维团队,尤其是已经使用 PGDG 仓库的 RPM 系环境。它不适合需要图形化界面或不愿接触命令行配置的团队,也不适合对 PostgreSQL 版本有严格向前兼容要求的场景,因为增量备份和表空间支持都依赖特定版本。在采用前,应先验证目标 PostgreSQL 版本是否满足 14+ 的增量备份要求,以及 17+ 的表空间支持,同时确认 TLS 配置和用户 vault 的凭据管理方式符合你的安全策略。最终判断:如果你能接受 C 语言生态的配置风格和版本绑定,pgmoneta 在功能覆盖面上值得一试,但若你只需要简单的全量备份,更轻量的工具可能更合适。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记