
薛定谔的备份为什么你的数据库备份可能毫无用处数据库备份验证工具Uphold完全入门【免费下载链接】upholdA tool for programmatically verifying database backups项目地址: https://gitcode.com/gh_mirrors/up/uphold你的数据库备份真的能恢复吗Uphold 是一款开源的数据库备份验证工具它会自动下载备份、解压、恢复到一个全新的数据库容器中并运行你自定义的程序化测试——在灾难发生前就告诉你备份到底能不能用。对于新手来说它就像给备份做了一次体检。 什么是薛定谔的备份项目作者用了一个非常形象的比喻The condition of any backup is unknown until a restore is attempted在你尝试恢复之前任何备份的状态都是未知的这句话点破了备份领域最残酷的真相✅ 备份任务运行成功 ≠ 备份文件可用❌ 压缩损坏、权限缺失、格式变更、SQL 语法报错……都只有真正恢复一次才能暴露绝大多数团队只备份、从不验证。直到某天数据库真的挂了恢复测试才开始——而那时往往发现备份已经废了。Uphold 要解决的就是这个问题把备份验证变成一件自动化、可重复、可观测的日常小事。️ 直观看看Uphold 的 Web 控制台Uphold 自带一个 Web 界面展示每个备份配置的历史运行结果。下图是项目 UI 的实际截图每一行圆点代表一次验证运行绿色为成功红/橙为失败界面上你还可以直接点击播放按钮手动触发一次备份验证点击任意记录查看完整日志。⚙️ Uphold 如何工作Uphold 的核心设计原则是一切皆可重复。它基于 Docker每次验证都在全新的单进程容器里完成互不污染状态uphold-ui └──▶ uphold-tester └──▶ engine-container数据库容器整个验证流程分三步对应代码中的三大组件Transport传输从 S3 或本地文件系统取回备份文件并负责解压支持嵌套压缩实现在lib/transports/local.rb和lib/transports/s3.rbEngine引擎拉起一个全新的数据库容器把备份数据导入支持 MongoDB、MySQL、PostgreSQL实现在lib/engines/目录Tests测试在导入完成后运行你写的 Ruby Minitest 测试用例全部通过才算备份 OK流程编排的总控逻辑在 runner.rbtransport.fetch → engine.start_container → engine.load → tests.run每一步失败都会留下明确的状态标记。️ 支持哪些数据库和存储位置类别支持项数据库引擎MongoDB、MySQL含 MariaDB、PostgreSQL备份来源S3 对象存储、本地文件自定义扩展可将自定义引擎放入engines/目录、自定义传输方式放入transports/目录运行时自动加载得益于 Docker你无需在宿主机安装任何数据库——每次验证都是冷启动的干净环境。 快速上手三步配置第一步准备目录结构在运行 Uphold 的机器上创建以下目录/etc/uphold/ /etc/uphold/conf.d/ /etc/uphold/engines/ /etc/uphold/transports/ /etc/uphold/tests/ /var/log/uphold第二步编写备份配置在/etc/uphold/conf.d/中为每个备份创建一个 YAML 文件核心是三部分transport去哪拿备份、engine用什么数据库恢复、tests恢复后跑什么测试。一个 S3 MongoDB 的配置示例enabled: true name: s3-mongo engine: type: mongodb settings: timeout: 10 database: your_db_name transport: type: s3 settings: region: us-west-2 access_key_id: your-access-key-id secret_access_key: your-secret-access-key bucket: your-backups path: mongodb/systemx/{date} filename: mongodb.tar date_format: %Y.%m.%d date_offset: 0 folder_within: mongodb/databases/MongoDB tests: - test_structure.rb - test_data_integrity.rb小提示路径和文件名中用{date}占位符配合date_offset就能每天自动验证昨天的备份。第三步启动 UI 容器docker pull forward3d/uphold-ui:latest docker run \ --rm \ -p 8079:8079 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /etc/uphold:/etc/uphold \ -v /var/log/uphold:/var/log/uphold \ forward3d/uphold-ui:latest然后浏览器打开http://服务器IP:8079即可看到验证面板。 六种状态标记一眼看懂结果每次运行会写入一个日志文件和一个状态文件见 runner.rb 中的状态逻辑UI 据此显示彩色圆点状态含义ok 传输、加载、测试全部成功备份合格ok_no_test 备份成功加载但未配置任何测试bad_transport 备份文件获取/传输失败bad_engine 数据库容器未能在时限内启动bad_tests 至少一个程序化测试未通过bad 传输或数据导入数据库时出错 用 API 做定时调度和监控Uphold 没有内置定时任务但提供了三个轻量 API方便你用 crontab 或任何监控系统集成GET /api/1.0/backups/配置名—— 返回该配置所有历史运行的 JSON 列表GET /api/1.0/backups/配置名/latest—— 返回最近一次运行的状态如ok/bad_testsPOST /api/1.0/backup—— 表单传name字段即可触发一次验证一个典型的自动化玩法备份脚本跑完后自动 POST 一次触发验证监控端定时轮询latest接口发现非ok状态就告警——从此备份是否可用变成一条持续的信号线而不是一次性的安慰。 项目结构速览想深入了解源码的话这些文件值得收藏总入口与环境初始化environment.rb全局配置加载lib/config.rb验证流程编排lib/runner.rb引擎实现lib/engines/mongodb.rb、lib/engines/mysql.rb、lib/engines/postgresql.rb传输方式实现lib/transports/local.rb、lib/transports/s3.rb测试执行器lib/tests.rbWeb 界面与 APIui.rb开发用示例配置dev/uphold.example.yml构建脚本build_and_run_tester、build_and_run_ui 写在最后备份不是目的可恢复才是目的。Uphold 的哲学可以总结为一句话不要祈祷你的备份有用而是每天让它证明自己有用。如果你正在为 MongoDB、MySQL 或 PostgreSQL 做定期备份花一个下午配置一次 Uphold就能把薛定谔的备份变成有体检报告的备份。项目仍处于 beta 阶段作者在 TODO.mdown 中列出了待办清单SQLite 支持、认证、deb 包安装等欢迎提 issue 和 PR 参与共建。【免费下载链接】upholdA tool for programmatically verifying database backups项目地址: https://gitcode.com/gh_mirrors/up/uphold创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考