文档/ 数据库/ 备份与恢复

备份与恢复

通过自动备份保护你的数据。sh0 支持本地、S3 和 Cloudflare R2 存储目标,可配置保留策略并一键恢复。

手动备份

你可以随时从数据库详情页触发备份。手动备份使用与计划备份相同的引擎特定转储工具。

  1. 导航到堆栈中的数据库。
  2. 点击 备份 选项卡。
  3. 点击 立即备份
  4. 选择存储目标(或使用默认值)。
  5. 备份在后台运行——你可以继续工作。
Database backups tab -- showing the Backup Now button and storage destination selector

sh0 使用每个引擎的原生转储工具来确保备份的一致性:

引擎备份工具格式
PostgreSQLpg_dump自定义格式(.dump)或 SQL
MySQL / MariaDBmysqldumpSQL(.sql.gz)
MongoDBmongodumpBSON 归档(.archive)
RedisRDB 快照RDB 文件(.rdb)
Tip
手动备份在执行版本升级、数据库迁移或批量数据变更等高风险操作之前非常有用。

计划备份

设置按计划自动运行的备份。sh0 使用 cron 表达式提供最大灵活性。

  1. 打开数据库的 备份 选项卡。
  2. 点击 配置计划
  3. 输入 cron 表达式或选择预设(每日、每 6 小时、每周)。
  4. 选择存储目标。
  5. 设置保留策略。
  6. 点击 保存
Scheduled backup configuration -- cron expression input, preset buttons, and storage destination dropdown

Cron 表达式

备份计划使用标准的 5 字段 cron 语法。以下是常见模式:

Common Cron Patterns
# Every day at 2:00 AM
0 2 * * *

# Every 6 hours
0 */6 * * *

# Every Sunday at midnight
0 0 * * 0

# Every hour
0 * * * *

# Monday to Friday at 3:30 AM
30 3 * * 1-5

存储目标

备份可以存储在服务器本地或上传到云对象存储。强烈建议使用远程存储以实现灾难恢复。

本地存储

默认情况下,备份存储在服务器的本地文件系统上。这是最简单的选项,但无法防止磁盘故障或服务器丢失。

Default backup location
/var/lib/sh0/backups/<stack-name>/<database-name>/
Warning
仅本地备份无法防止硬件故障。对于生产数据库,请始终配置至少一个远程存储目标。

S3 兼容存储

sh0 支持任何 S3 兼容的对象存储提供商,包括 AWS S3、Cloudflare R2、MinIO、Backblaze B2 和 DigitalOcean Spaces。

要配置存储提供商:

  1. 前往 设置 → 存储提供商
  2. 点击 添加提供商
  3. 输入端点 URL、访问密钥、密钥、存储桶名称和区域。
  4. 点击 测试连接 以验证访问权限。
  5. 点击 保存
S3 storage provider configuration -- endpoint, credentials, bucket, and region fields with a Test Connection button
Tip
由于 Cloudflare R2 提供免费出站流量,因此是备份存储的绝佳选择。将端点设置为 https://<account-id>.r2.cloudflarestorage.com

备份保留

每个计划为其数据源保留有限份数的备份。您设置的值是要保留的备份份数,而不是天数。保留策略只统计该计划自己创建的备份:手动备份既不计入份数,也永远不会被删除;若同一数据源有多个计划,每个计划只清理自己的备份。默认值为 7,设为 0 表示不限份数:不会自动删除任何备份。

设置项描述
保留份数该来源需要保留多少份已完成的计划备份。超出这个份数的部分,就是清理动作会删除的对象。
手动备份既不计入保留份数,也不会被自动删除。
取值小于或等于 0关闭该计划的自动清理。
自动清理——已在 1.6.18 中修复
在 1.6.17 及更早版本中,清理从未被执行:保留份数被保存并显示,但计划备份会一直堆积,直到手动删除。从 1.6.18 起,每次计划备份成功后都会执行清理,并为已经超量的仓库提供每小时一次的补扫。如果您仍停留在更早的版本,请继续在「备份」标签页中删除旧备份,并据此规划存储容量。

从备份恢复

恢复备份会用备份数据替换当前数据库内容。sh0 会处理停止数据库、恢复数据和重启容器的过程。

  1. 打开数据库的 备份 选项卡。
  2. 在历史列表中找到要恢复的备份。
  3. 点击备份旁边的 恢复 按钮。
  4. 在对话框中确认恢复操作。
  5. 等待恢复完成——数据库将暂时不可用。
Backup restore confirmation dialog -- warning about data replacement and a confirm button
Danger
恢复备份会覆盖数据库中的所有当前数据。建议在恢复旧备份之前,先为当前状态创建一个新备份。

备份历史和状态

备份历史表显示数据库的所有备份,包括状态、大小、持续时间和存储位置。

Backup history table -- showing timestamps, sizes, durations, statuses, and storage destinations for each backup

每个备份可以具有以下状态之一:

  • 已完成 -- 备份成功完成,可用于恢复。
  • 进行中 -- 备份正在运行。
  • 失败 -- 备份遇到错误。点击条目可查看错误信息。
  • 已过期 -- 备份已被保留策略移除。

你还可以直接从控制台下载已完成的备份,以便离线存储或迁移到其他服务器。