备份与恢复
通过自动备份保护你的数据。sh0 支持本地、S3 和 Cloudflare R2 存储目标,可配置保留策略并一键恢复。
手动备份
你可以随时从数据库详情页触发备份。手动备份使用与计划备份相同的引擎特定转储工具。
- 导航到堆栈中的数据库。
- 点击 备份 选项卡。
- 点击 立即备份。
- 选择存储目标(或使用默认值)。
- 备份在后台运行——你可以继续工作。
Database backups tab -- showing the Backup Now button and storage destination selector
sh0 使用每个引擎的原生转储工具来确保备份的一致性:
| 引擎 | 备份工具 | 格式 |
|---|---|---|
| PostgreSQL | pg_dump | 自定义格式(.dump)或 SQL |
| MySQL / MariaDB | mysqldump | SQL(.sql.gz) |
| MongoDB | mongodump | BSON 归档(.archive) |
| Redis | RDB 快照 | RDB 文件(.rdb) |
Tip
手动备份在执行版本升级、数据库迁移或批量数据变更等高风险操作之前非常有用。
计划备份
设置按计划自动运行的备份。sh0 使用 cron 表达式提供最大灵活性。
- 打开数据库的 备份 选项卡。
- 点击 配置计划。
- 输入 cron 表达式或选择预设(每日、每 6 小时、每周)。
- 选择存储目标。
- 设置保留策略。
- 点击 保存。
Scheduled backup configuration -- cron expression input, preset buttons, and storage destination dropdown
Cron 表达式
备份计划使用标准的 5 字段 cron 语法。以下是常见模式:
# 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存储目标
备份可以存储在服务器本地或上传到云对象存储。强烈建议使用远程存储以实现灾难恢复。
本地存储
默认情况下,备份存储在服务器的本地文件系统上。这是最简单的选项,但无法防止磁盘故障或服务器丢失。
/var/lib/sh0/backups/<stack-name>/<database-name>/ Warning
仅本地备份无法防止硬件故障。对于生产数据库,请始终配置至少一个远程存储目标。
S3 兼容存储
sh0 支持任何 S3 兼容的对象存储提供商,包括 AWS S3、Cloudflare R2、MinIO、Backblaze B2 和 DigitalOcean Spaces。
要配置存储提供商:
- 前往 设置 → 存储提供商。
- 点击 添加提供商。
- 输入端点 URL、访问密钥、密钥、存储桶名称和区域。
- 点击 测试连接 以验证访问权限。
- 点击 保存。
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 会处理停止数据库、恢复数据和重启容器的过程。
- 打开数据库的 备份 选项卡。
- 在历史列表中找到要恢复的备份。
- 点击备份旁边的 恢复 按钮。
- 在对话框中确认恢复操作。
- 等待恢复完成——数据库将暂时不可用。
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
每个备份可以具有以下状态之一:
- 已完成 -- 备份成功完成,可用于恢复。
- 进行中 -- 备份正在运行。
- 失败 -- 备份遇到错误。点击条目可查看错误信息。
- 已过期 -- 备份已被保留策略移除。
你还可以直接从控制台下载已完成的备份,以便离线存储或迁移到其他服务器。