TL;DR: 灾难恢复计划是 SaaS 应对数据丢失、损坏或供应商故障的生命线。本指南涵盖:D1 自动备份到 R2、定时点恢复策略、备份完整性校验,以及恢复操作手册。
引言
数据丢失不是「是否会发生」的问题,而是「何时发生」的问题。配置错误的迁移、导致数据损坏的 bug,或供应商服务中断——任何一种都可能摧毁数月的用户数据。完善的备份与灾难恢复计划,就是你的保险单。
使用 Cron 触发器实现自动备份
// src/server/backup.ts
import { createServerFn } from '@tanstack/react-start'
export const runDatabaseBackupFn = createServerFn({ method: 'POST' })
.handler(async ({ context }) => {
const env = context.env
const timestamp = new Date().toISOString()
const backupKey = `backups/db/${timestamp}.sqlite`
// 导出 D1 数据库
const result = await env.DB.dump()
// 存储到 R2
await env.R2.put(backupKey, result.body, {
customMetadata: { timestamp, type: 'full' },
})
// 清理旧备份(保留最近 7 天)
await cleanOldBackups(env.R2, 'backups/db/', 7)
return { backupKey, timestamp }
})
备份策略矩阵
| 备份类型 | 执行频率 | 存储位置 | 保留时长 | 恢复时间 |
|---|---|---|---|---|
| 全量数据库 | 每日 | R2 | 30 天 | 30 分钟 |
| 事务日志 | 持续 | D1 | 7 天 | 1 分钟 |
| 文件资产 | 变更时 | R2 版本控制 | 90 天 | 即时 |
| 配置数据 | 变更时 | Git + KV | 永久 | 10 分钟 |
结论
使用 Cloudflare Cron 触发器实现备份自动化。将数据存储在 R2 中以确保持久性。每月测试一次恢复流程。没有经过实际恢复测试的备份,根本称不上备份。了解更多细节,请参阅 Cloudflare R2 对象存储指南、D1 生产环境指南、Cron 触发器 文档,以及 SaaS 安全最佳实践。