pg_dump 替代方案
在逻辑备份方面,Databasus 构建在 pg_dump 之上。Databasus 并不是要取代 pg_dump,而是在其基础上扩展了备份管理、Web 界面、自动调度、云存储集成、通知、团队协作功能和内置加密。除了逻辑备份,Databasus 还支持物理备份、基于 WAL 归档的增量备份和时间点恢复(Point-in-Time Recovery)。
快速对比
下表概览 Databasus 如何扩展 pg_dump 的核心功能:
| 功能 | pg_dump | Databasus |
|---|---|---|
| 备份引擎 | pg_dump | 基于 pg_dump 构建 |
| 备份管理 | ❌ 无 | ✅ 有 |
| 其他数据库支持 | 仅 PostgreSQL | PostgreSQL、MySQL、MariaDB、MongoDB |
| 界面 | 命令行 | Web 界面 + API |
| 调度 | 手动或 cron 脚本 | ✅ 内置调度器 |
| 存储目标 | 仅本地文件系统 | 本地、S3、Google Drive、R2、Azure、NAS、Dropbox |
| 压缩 | gzip、LZ4、zstd(手动) | zstd(自动、已优化) |
| 加密 | 需要外部工具 | ✅ 内置 AES-256-GCM |
| 通知 | ❌ 无 | ✅ Slack、Teams、Telegram、邮件、Webhook |
| 团队功能 | ❌ 无 | ✅ 工作区、RBAC、审计日志 |
| 保留策略 | 手动清理脚本 | ✅ 自动保留 |
| 健康监控 | ❌ 无 | ✅ 内置健康检查 |
| 物理备份 | ❌ 无 | ✅ 有 |
| 增量备份 | ❌ 无 | ✅ 块级(PG 17+) |
| 时间点恢复(PITR) | ❌ 无 | ✅ 有 |
| 远程备份 | ✅ 有(命令行) | ✅ 有 |
pg_dump 是什么?
pg_dump 是 PostgreSQL 自带的逻辑备份工具。它从一开始就是 PostgreSQL 的一部分,是数据库导出的标准工具。
pg_dump 的优势
- 可移植的备份:生成 SQL 或自定义格式的 dump,可以恢复到不同版本的 PostgreSQL。
- 选择性备份:可以导出指定的表、schema 或整个数据库。
- 一致性快照:利用 PostgreSQL 的 MVCC 机制生成一致的备份,不会阻塞写入。
- 广泛支持:每个 PostgreSQL 安装都自带,文档完善,久经考验。
- 灵活的输出格式:纯 SQL、自定义、目录或 tar 格式。
pg_dump 的局限
pg_dump 固然强大,但在生产环境中使用通常还需要额外写脚本:
- 没有内置调度:需要 cron 任务或外部调度器。
- 只写本地存储:输出到本地文件系统,上传到云端需要额外脚本。
- 没有加密:备份文件默认不加密,需要通过 gpg 等工具管道处理。
- 没有通知:备份成功或失败时无法告警,除非自己写脚本。
- 没有保留管理:旧备份必须手动或用脚本清理。
- 只有命令行:没有可视化界面用于监控和管理。
Databasus 如何扩展 pg_dump
Databasus 使用 pg_dump 作为备份引擎,保留了逻辑备份的所有优点,并在此之上加入了企业级功能。
底层原理: 当你在 Databasus 中触发备份时,它会用优化过的参数执行 pg_dump,然后自动完成压缩、加密并上传到你配置的存储目标。
Web 界面
不用再记 pg_dump 的命令行参数,Databasus 提供 Web 界面,你可以在其中:
- 通过引导式连接向导添加数据库
- 用可视化控件配置备份计划
- 一眼看清备份历史和状态
- 一键下载或恢复备份
- 查看数据库健康与可用性图表
优化的压缩
Databasus 默认使用 zstd 压缩(级别 5),它带来:
- 体积缩小 4-8 倍(相对未压缩的 dump)
- 约 20% 的运行时开销,远快于 gzip
- 自动处理,无需再通过压缩工具管道处理
超越 pg_dump:物理备份与 PITR
Databasus 的逻辑备份基于 pg_dump,但它还能做到 pg_dump 做不到的事:
- 物理备份:通过
pg_basebackup对整个数据库集群做文件级复制。对大型数据库,备份和恢复都更快。 - 增量与 WAL 备份:通过
pg_basebackup --incremental实现块级增量备份(由服务端 WAL 摘要驱动),再加上通过pg_receivewal的持续 WAL 流式传输,实现时间点恢复:可以恢复到两次备份之间的任意一秒。 - 灾难恢复:物理基础备份加持续 WAL 流式传输,为接近零数据丢失的需求而设计。
这些备份构建在 PostgreSQL 17 的原生备份机制之上,Databasus 复用的是 PostgreSQL 自身久经考验的工具链,而不是重新造轮子。它们要求 PostgreSQL 17 或更新的版本;在更早的版本上只能使用逻辑 pg_dump 备份。所有操作都由 Databasus 主机通过复制协议远程执行,数据库服务器上不需要安装任何软件。封闭网络可以通过 SSH 隧道连接到内部主机或跳板机,数据库无需暴露到公网。 了解物理备份和 PITR 备份的工作原理。
备份自动化
使用 pg_dump 时最常见的难题之一,就是搭建可靠的自动化备份。
传统的 pg_dump 自动化
一个典型的 pg_dump 自动化脚本大概是这样:
#!/bin/bash
# Backup script for pg_dump
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups"
DB_NAME="mydb"
# Create backup
pg_dump -Fc -h localhost -U postgres $DB_NAME > $BACKUP_DIR/$DB_NAME_$DATE.dump
# Compress (if not using custom format)
# gzip $BACKUP_DIR/$DB_NAME_$DATE.sql
# Encrypt
gpg --encrypt --recipient backup@company.com $BACKUP_DIR/$DB_NAME_$DATE.dump
# Upload to S3
aws s3 cp $BACKUP_DIR/$DB_NAME_$DATE.dump.gpg s3://my-bucket/backups/
# Cleanup old backups (keep last 7 days)
find $BACKUP_DIR -name "*.dump*" -mtime +7 -delete
# Send notification on failure
if [ $? -ne 0 ]; then
curl -X POST https://hooks.slack.com/... -d '{"text":"Backup failed!"}'
fi这个脚本需要维护、测试和监控。每个数据库还需要单独的 cron 条目。
Databasus 的自动化
同样的功能在 Databasus 中是内置的:
- 可视化调度器:按小时、天、周、月或 cron 设置备份,并指定具体时间。
- 自动压缩:自动应用 zstd 压缩。
- 内置加密:AES-256-GCM 加密,每个备份使用唯一密钥。
- 云端上传:直接上传到 S3、Google Drive、Cloudflare R2、Azure 等目标。
- 保留策略:根据你的保留设置自动清理旧备份。
- 通知:成功或失败时向 Slack、Teams、Telegram、邮件发送告警。
存储选项
pg_dump 只写本地文件系统。要把备份放到云存储,需要额外的工具和脚本。
Databasus 的存储目标
Databasus 开箱即用地支持多种存储目标:
- 本地存储
- Amazon S3 及 S3 兼容服务
- Google Drive
- Cloudflare R2
- Azure Blob Storage
- NAS(网络附加存储)
- Dropbox
每个数据库可以有自己的存储目标,也可以配置多个目标做冗余。
通知
及时知道备份成功还是失败,对数据保护至关重要。
pg_dump 的通知
pg_dump 没有通知系统。你需要:
- 写检查退出码的封装脚本
- 接入外部监控工具
- 搭建自定义告警流水线
Databasus 的通知
Databasus 内置了对以下渠道的通知:
- Slack
- Discord
- Telegram
- Microsoft Teams
- 邮件
- Webhook(用于自定义集成)
你可以配置哪些事件触发通知:备份成功、备份失败,或两者都通知。
团队功能
pg_dump 是单用户命令行工具。Databasus 为团队加入了协作功能:
Databasus 的团队能力
- 工作区:按项目或团队组织数据库、通知渠道和存储。用户只能看到自己被邀请加入的工作区。
- 基于角色的访问控制:为团队成员分配查看者、编辑者或管理员权限,控制每个人能做什么。
- 审计日志:跟踪系统里的所有操作和变更,是安全合规与责任追溯的基础。
- 共享通知:团队频道自动收到备份状态更新。
安全
与直接使用 pg_dump 相比,安全是 Databasus 提供显著附加价值的领域。
pg_dump 的安全
pg_dump 生成的是未加密的备份文件。要保护它们需要:
- 把输出通过加密工具(gpg、openssl)管道处理
- 单独管理加密密钥
- 确保密钥安全存放并定期轮换
- 设置正确的文件权限
Databasus 的安全
Databasus 在多个层面实现安全:
- AES-256-GCM 加密:所有密码、令牌和凭据都被加密,加密密钥与数据库分开存放。
- 每个备份独立加密:每个备份文件都用由主密钥、备份 ID 和随机盐派生出的唯一密钥加密。
- 只读数据库访问:强制只使用 SELECT 权限,即使被攻破也不会破坏数据。
恢复流程
两个工具都支持恢复备份,但流程不同。
恢复 pg_dump 备份
恢复一个 pg_dump 备份需要:
- 找到备份文件
- 如果加密了,先解密
- 如果压缩了,先解压
- 用正确的参数运行
pg_restore或psql
恢复 Databasus 备份
Databasus 简化了恢复:
- 一键下载:直接在 Web 界面下载任意备份。
- 自动解密:下载时备份会自动解密。
- 提供恢复命令:Databasus 会为每个备份给出准确的
pg_restore命令。 - 支持并行恢复:利用多个 CPU 核心,加快大型数据库的恢复。
安装
安装 pg_dump
pg_dump 随 PostgreSQL 一起提供。只要安装了 PostgreSQL,就有 pg_dump。
安装 Databasus
Databasus 提供多种安装方式:
- 一行脚本:安装 Docker(如果需要)、部署 Databasus 并配置自动启动。
- Docker run:一条命令启动,附带内嵌 PostgreSQL。
- Docker Compose:对部署有更多控制。
结论
pg_dump 是 PostgreSQL 久经验证的备份工具,而 Databasus 正是直接构建在它之上。直接使用 pg_dump 还是通过 Databasus 使用,取决于你的需求。
直接使用 pg_dump,如果:
- 你只需要一次性或临时的数据库导出
- 你习惯编写并维护 shell 脚本
- 你已经有自动化基础设施(Ansible、Terraform 等)
- 你只需要本地备份,不需要云存储
- 你是单人开发者,需求简单
使用 Databasus,如果:
- 你想要按计划自动备份,而不用写脚本
- 你需要把备份存到云端(S3、Google Drive 等)
- 你想要内置加密,而不用手动管理密钥
- 你需要在备份成功或失败时收到通知
- 你在团队中工作,需要协作功能
- 你更喜欢可视化界面而不是命令行工具
- 你想要自动的保留策略和清理
- 你需要物理备份、增量备份或时间点恢复来做灾难恢复
Databasus 的逻辑备份基于 pg_dump,并在其之上扩展了自动化、安全和团队功能。除此之外,Databasus 还支持物理备份、基于 WAL 归档的增量备份和时间点恢复,而这些是 pg_dump 根本无法提供的能力。