Databasus 开源数据库备份工具技术分析
一、背景与目标
1. 项目背景
A. 业务场景
随着云计算和容器化技术的普及,数据库备份管理成为运维工作的核心环节。传统的备份方案存在以下痛点:需要编写复杂的脚本、缺乏统一的可视化管理界面、难以支持多种数据库类型、无法灵活配置存储目标和通知渠道。
B. 痛点分析
- 操作复杂:传统方案依赖命令行工具如 pg_dump、mysqldump,需要编写自动化脚本
- 缺乏监控:备份任务执行状态难以及时掌握,失败发现滞后
- 存储单一:难以同时支持本地存储和多种云存储服务
- 协作困难:团队成员无法共享备份配置和查看备份历史
2. 设计目标
A. 功能目标
- 支持 PostgreSQL、MySQL、MariaDB、MongoDB 四种主流数据库
- 提供可视化的 Web 管理界面
- 支持多种存储后端和通知渠道
- 支持定时备份和加密
B. 非功能目标
- 安全性:备份文件 AES-256-GCM 加密,敏感数据不暴露
- 易用性:提供直观的 UI,支持暗色/亮色主题
- 可靠性:支持 Docker 容器化部署,自动重启
- 可扩展性:支持团队协作,工作空间隔离,角色权限管理
二、系统架构
1. 整体架构
graph TB
subgraph 用户层
U1[管理员]
U2[成员]
U3[查看者]
end
subgraph Databasus应用层
W[Web界面]
A[API服务]
S[调度器]
E[加密引擎]
end
subgraph 数据库连接层
PG[PostgreSQL]
MY[MySQL]
MR[MariaDB]
MO[MongoDB]
end
subgraph 存储层
L[本地存储]
S3[S3兼容存储]
GD[Google Drive]
FTP[SFTP/FTP]
RC[Rclone]
end
subgraph 通知层
EM[邮件]
TG[Telegram]
SL[Slack]
DC[Discord]
WH[Webhook]
end
U1 --> W
U2 --> W
U3 --> W
W --> A
A --> S
S --> PG
S --> MY
S --> MR
S --> MO
S --> E
E --> L
E --> S3
E --> GD
E --> FTP
E --> RC
S --> EM
S --> TG
S --> SL
S --> DC
S --> WH2. 组件说明
A. Web 界面
- 提供 RESTful API 接口
- 支持暗色和亮色主题切换
- 响应式设计,支持移动端访问
B. 调度器
- 支持多种调度策略:每小时、每天、每周、每月、Cron 表达式
- 智能压缩:4-8 倍空间节省,约 20% 性能开销
C. 加密引擎
- 使用 AES-256-GCM 算法加密备份文件
- 零信任存储:加密后的备份文件即使泄露也无法解密
- 敏感数据加密存储,日志中不暴露
三、核心功能
1. 支持的数据库
| 数据库类型 | 支持版本 |
|---|---|
| PostgreSQL | 12, 13, 14, 15, 16, 17, 18 |
| MySQL | 5.7, 8, 9 |
| MariaDB | 10, 11 |
| MongoDB | 4, 5, 6, 7, 8 |
2. 定时备份策略
graph LR
A[调度器] --> B{调度类型}
B --> C[每小时]
B --> D[每天]
B --> E[每周]
B --> F[每月]
B --> G[Cron表达式]
C --> H[执行备份]
D --> H
E --> H
F --> H
G --> H
H --> I[压缩]
I --> J[加密]
J --> K[存储]
K --> L[通知]3. 存储后端支持
- 本地存储:直接存储在服务器磁盘
- 云存储:S3、Cloudflare R2、Google Drive、Azure Blob Storage
- 网络存储:NAS、SFTP、FTP
- 扩展存储:通过 Rclone 支持 70+ 种存储服务
4. 通知渠道
- 邮件:SMTP 协议
- 即时通讯:Telegram、Slack、Discord
- Webhook:自定义 HTTP 回调
四、安全设计
1. 加密机制
A. 备份文件加密
- 算法:AES-256-GCM
- 适用场景:所有存储到外部服务的备份文件
- 安全性:即使存储服务被攻破,备份文件也无法解密
B. 敏感数据保护
- 数据库凭证加密存储
- 敏感配置不在日志中显示
- 错误信息中不包含敏感数据
2. 访问控制
A. 工作空间隔离
- 不同项目/团队使用独立工作空间
- 工作空间间数据隔离
B. 角色权限
| 角色 | 权限 |
|---|---|
| 查看者 | 仅查看备份状态和历史 |
| 成员 | 管理数据库和备份任务 |
| 管理员 | 管理工作空间内所有资源 |
| 所有者 | 完全控制,包括删除工作空间 |
C. 审计日志
- 记录所有用户操作
- 记录备份任务执行历史
3. 只读用户原则
- Databasus 默认使用只读用户连接数据库
- 不存储任何可以修改数据的凭证
- 备份过程不会对源数据库产生写入操作
五、部署方式
1. 部署架构对比
graph LR
subgraph Docker部署
D1[Docker Run]
D2[Docker Compose]
end
subgraph K8s部署
K1[ClusterIP]
K2[LoadBalancer]
K3[Ingress]
end
D1 --> S[Databasus容器]
D2 --> S
K1 --> S
K2 --> S
K3 --> S
S --> V[数据卷<br/>./databasus-data]2. 自动化脚本部署(推荐)
sudo apt-get install -y curl && \
sudo curl -sSL https://raw.githubusercontent.com/databasus/databasus/refs/heads/main/install-databasus.sh \
| sudo bash功能:
- 自动安装 Docker 和 Docker Compose
- 配置 Databasus 服务
- 设置开机自启动
3. Docker Run 部署
docker run -d \
--name databasus \
-p 4005:4005 \
-v ./databasus-data:/databasus-data \
--restart unless-stopped \
databasus/databasus:latest4. Docker Compose 部署
services:
databasus:
container_name: databasus
image: databasus/databasus:latest
ports:
- "4005:4005"
volumes:
- ./databasus-data:/databasus-data
restart: unless-stopped5. Kubernetes Helm 部署
A. ClusterIP + Port-Forward(开发/测试)
helm install databasus oci://ghcr.io/databasus/charts/databasus \
-n databasus --create-namespace
kubectl port-forward svc/databasus-service 4005:4005 -n databasusB. LoadBalancer(云环境)
helm install databasus oci://ghcr.io/databasus/charts/databasus \
-n databasus --create-namespace \
--set service.type=LoadBalancerC. Ingress(域名访问)
helm install databasus oci://ghcr.io/databasus/charts/databasus \
-n databasus --create-namespace \
--set ingress.enabled=true \
--set ingress.hosts[0].host=backup.example.com六、使用流程
graph TD
A[访问 Dashboard<br/>http://localhost:4005] --> B[添加数据库]
B --> C[配置调度策略]
C --> D[设置数据库连接]
D --> E[选择存储后端]
E --> F{添加通知?}
F -->|是| G[配置通知渠道]
F -->|否| H[保存并启动]
G --> H
H --> I[系统验证配置]
I --> J{验证成功?}
J -->|是| K[开始定时备份]
J -->|否| L[修正配置]
L --> I
K --> M[接收备份通知]七、技术特点
1. 从 Postgresus 到 Databasus
项目原名为 Postgresus,专注于 PostgreSQL 备份。2025 年 12 月更名为 Databasus,主要原因是:
- 功能扩展:从单一 PostgreSQL 支持扩展到 MySQL、MariaDB、MongoDB
- 品牌定位:从简单的 pg_dump UI 包装工具成长为成熟的备份管理系统
- 商标合规:PostgreSQL 是 PostgreSQL Inc. 的注册商标
2. 云数据库与自托管数据库支持
A. 支持的云数据库
- AWS RDS
- Google Cloud SQL
- Azure Database
B. 不支持 PITR 的原因
云提供商已提供原生的 PITR(时间点恢复)功能,外部 PITR 备份无法恢复到托管的云数据库,因此对云托管 PostgreSQL 来说不实用。
C. 实用的备份粒度
每小时和每日备份对 99% 的项目已足够,无需 WAL 归档的操作复杂性。
3. AI 辅助开发策略
A. AI 用于
- 代码质量验证和漏洞搜索
- 文档、注释和代码清理改进
- 开发过程中的辅助
- 人工审查后的 PR 和提交双重检查
B. AI 不用于
- 编写整个代码
- 随意编写代码
- 未经人工逐行验证的代码
- 没有测试的代码
C. 质量保证
- 完善的测试覆盖率(单元测试和集成测试)
- CI/CD 流水线自动化
- 经验丰富的开发者验证
八、对比分析
1. 与传统备份方案对比
| 特性 | Databasus | 传统脚本方案 |
|---|---|---|
| 部署复杂度 | 低(Docker 一键部署) | 高(需编写和维护脚本) |
| 可视化管理 | 支持 | 不支持 |
| 多数据库支持 | 支持 | 需分别配置 |
| 存储后端 | 多种 | 通常单一 |
| 通知渠道 | 多种 | 需自行实现 |
| 加密支持 | 内置 AES-256-GCM | 需自行实现 |
| 团队协作 | 支持 | 不支持 |
2. 与云备份服务对比
| 特性 | Databasus | 云备份服务 |
|---|---|---|
| 数据主权 | 完全控制 | 托管给云服务商 |
| 成本 | 一次性部署成本 | 按量计费 |
| 定制性 | 高(开源可修改) | 低 |
| 混合云支持 | 支持 | 通常受限 |
九、适用场景
1. 推荐使用场景
- 中小企业:缺乏专业 DBA 团队,需要简单可靠的备份方案
- DevOps 团队:需要可视化的备份管理界面
- 多数据库环境:同时使用 PostgreSQL、MySQL、MongoDB
- 混合云部署:数据库分布在本地和云端
- 合规要求高:需要数据加密和审计日志
2. 不适用场景
- 需要 PITR 的 PostgreSQL:云数据库已有原生 PITR
- 超大规模部署:单一实例可能有性能瓶颈
- 特殊数据库:不支持除四种外的其他数据库
十、总结
Databasus 是一个设计精良的开源数据库备份管理工具,通过 Docker 容器化部署和友好的 Web 界面,大大降低了数据库备份管理的门槛。其核心优势在于:
- 多数据库支持:覆盖 PostgreSQL、MySQL、MariaDB、MongoDB 四种主流数据库
- 安全可靠:AES-256-GCM 加密、零信任存储、只读用户原则
- 易于部署:支持自动化脚本、Docker、Kubernetes 多种部署方式
- 团队协作:工作空间隔离、角色权限、审计日志
- 灵活通知:邮件、Telegram、Slack、Discord、Webhook 多渠道
对于需要统一管理多种数据库备份的团队,Databasus 是一个值得考虑的自托管解决方案。