pg_dump 替代方案

在逻辑备份方面,Databasus 构建在 pg_dump 之上。Databasus 并不是要取代 pg_dump,而是在其基础上扩展了备份管理、Web 界面、自动调度、云存储集成、通知、团队协作功能和内置加密。除了逻辑备份,Databasus 还支持物理备份、基于 WAL 归档的增量备份和时间点恢复(Point-in-Time Recovery)。

快速对比

下表概览 Databasus 如何扩展 pg_dump 的核心功能:

功能pg_dumpDatabasus
备份引擎pg_dump基于 pg_dump 构建
备份管理❌ 无✅ 有
其他数据库支持仅 PostgreSQLPostgreSQL、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 权限,即使被攻破也不会破坏数据。

进一步了解 Databasus 的安全机制 →

恢复流程

两个工具都支持恢复备份,但流程不同。

恢复 pg_dump 备份

恢复一个 pg_dump 备份需要:

  1. 找到备份文件
  2. 如果加密了,先解密
  3. 如果压缩了,先解压
  4. 用正确的参数运行 pg_restorepsql

恢复 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 根本无法提供的能力。