开源 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 计划。
真实事故:生产环境数据丢失
2023 年,一个宠物项目(月收入约 1500 美元)因人为错误受损。在生产环境中,通过 psql,执行了这个查询:
UPDATE users SET email = '[email protected]' WHERE email ILIKE '%%';
它删除了约 1 万条记录。最后的备份是一个月前的(使用像 PgBackRest 这样的控制台工具)。通过基于 ID 的脚本恢复了 65%;其余退款。损失:约 30% 利润 + 停机时间。
这次事故暴露了缺陷:没有新鲜备份,忽略 SAVEPOINT/SELECT,以及很少进行恢复测试。
架构与开发
第一个 Java 版本花了一个月时间,然后迁移到 Go 以获得更好性能。围绕 pg_dump 的 UI 包装器,包括:
- 备份压缩(自定义压缩)。
- 可选成功通知。
- 健康检查的 API 端点。
当前用法:
- 小型 VPS 项目的首要备份。
- 云 DBaaS 的备份(作为宕机/删除的备用)。
项目采用 MIT 许可,自托管,带有 Web 界面。
开发计划:监控与告警
路线图聚焦于 PostgreSQL 特定的监控:
- 分析
pg_stat_activity、pg_stat_sys、pg_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
暂无评论。