返回首页

基于 Go 的开源 PostgreSQL 备份

开源工具 Postgresus 使用 pg_dump 自动化 PostgreSQL 备份,支持通知和监控。在生产环境数据丢失事件后开发。支持 S3、WAL PITR、负载警报,适用于资深开发者。

Postgresus:无云 PostgreSQL 备份和监控
Advertisement 728x90

开源 PostgreSQL 备份工具的开发:从事故到生产就绪解决方案

一位开发者构建了一个自托管的 Web 应用,用于 PostgreSQL 备份,针对中高级专业人士。该项目以 pg_dump 为基础,添加了调度器、存储集成和数据库可用性监控。技术栈:Go(从 Java 移植)、Gin、GORM、React + TypeScript、PostgreSQL、Docker Compose。支持 PostgreSQL 13–17 版本。

关键特性:

  • 定时备份(类似 cron 的调度器),存储到本地磁盘、S3、Google Drive。
  • 失败通知到 Telegram、email、Slack,经过 N 次尝试后(误报过滤)。
  • 健康检查,带数据库可用性图表。

该项目处理 VPS 项目的首要备份,以及云 DBaaS 的二级备份作为 B 计划。

Google AdInline article slot

真实事故:生产环境数据丢失

2023 年,一个宠物项目(月收入约 1500 美元)因人为错误受损。在生产环境中,通过 psql,执行了这个查询:

UPDATE users SET email = '[email protected]' WHERE email ILIKE '%%';

它删除了约 1 万条记录。最后的备份是一个月前的(使用像 PgBackRest 这样的控制台工具)。通过基于 ID 的脚本恢复了 65%;其余退款。损失:约 30% 利润 + 停机时间。

这次事故暴露了缺陷:没有新鲜备份,忽略 SAVEPOINT/SELECT,以及很少进行恢复测试。

Google AdInline article slot

架构与开发

第一个 Java 版本花了一个月时间,然后迁移到 Go 以获得更好性能。围绕 pg_dump 的 UI 包装器,包括:

  • 备份压缩(自定义压缩)。
  • 可选成功通知。
  • 健康检查的 API 端点。

当前用法:

  • 小型 VPS 项目的首要备份。
  • 云 DBaaS 的备份(作为宕机/删除的备用)。

项目采用 MIT 许可,自托管,带有 Web 界面。

Google AdInline article slot

开发计划:监控与告警

路线图聚焦于 PostgreSQL 特定的监控:

  • 分析 pg_stat_activitypg_stat_syspg_locks,带 UI 可视化(postgres_exporter + Grafana 的替代)。
  • 慢查询告警(INSERT 阈值 >100ms)。
  • CPU 时间和执行频率统计,用于瓶颈检测。
  • 扩展存储(Yandex Disk、NFS、FTP)和通知(Discord、Mattermost)。

增量备份 + WAL 流式传输与 PITR 已实现(2025 更新)。

与生产数据库协作规则

事故后,引入了严格实践:

  • UPDATE 前:必须 SELECT LIMIT 1–2 进行验证。
  • 批量操作:手动 SAVEPOINT。
  • 季度恢复演练(云 + 本地备份)。
BEGIN;
SAVEPOINT sp1;
SELECT * FROM users WHERE email ILIKE '%old%' LIMIT 2;
-- OK? UPDATE...
RELEASE SAVEPOINT sp1;
COMMIT;

两年多来,从 PostgreSQL 和云备份的恢复一直顺利无虞。

重要事项

  • 该工具解决了真实痛点:自动化 + 通知防止那些罕见的 0.01% 数据丢失情况。
  • Go 实现确保 VPS 低开销。
  • 负载监控与备份开箱即用集成。
  • 定期测试恢复——没有验证的备份毫无用处。
  • 开源替代云 DBaaS 备份,作为容错层。

— Editorial Team

Advertisement 728x90

继续阅读