不小心删除了 Cloudflare D1 数据库?现在只能在删除后的七天内通过 API 恢复。Cloudflare 于 2026 年 10 月 23 日公布了这一变更:删除超过七天的数据库,其恢复请求会失败。发生事故时,请核实数据库 ID,并尽快提交 undelete 请求。

变更内容
恢复方法需要账户 ID 和已删除数据库的 UUID;也可以在请求正文中传入新名称。默认情况下,数据库会以原名称恢复。如果账户中已有其他数据库使用该名称,则必须指定 new_name 才能恢复。相关条件列于 D1 undelete API 参考文档中。
期限为七天,即 7 × 24 小时。因此,仅记录日历日期并不足够:请记录删除时间,并将其与请求提交时间进行比较。如果期限将至,应先提交恢复请求,再检查名称和数据。
操作步骤
- 找到已删除的数据库。根据日志、基础设施代码或事故记录,核实 account ID 和 database ID。API 路径使用数据库 UUID;仅凭数据库显示名称不足以发起请求。
- 检查时间窗口。确认删除后尚未满七天。Cloudflare 建议在发现误删后立即提交请求。
- 处理名称冲突。如果原名称已被使用,请通过
new_name传入一个可用名称;否则无需更改名称。 - 调用文档所述方法。API 使用
POST /accounts/{account_id}/d1/database/{database_id}/undelete。使用具备所需权限的 API 令牌进行授权,并勿将密钥写入日志。 - 检查结果。请求成功后,确认数据库已在账户中以预期名称出现,并检查应用是否连接到了正确的实例。
Undelete 与 Time Travel 用途不同
Undelete 用于恢复已删除的数据库。Time Travel 则根据时间点或 bookmark 恢复现有数据库的状态。Cloudflare 文档指出,历史记录最长可追溯至过去 30 天;实际保留期限取决于套餐。执行 undelete 后,Time Travel 无法将数据库恢复到恢复操作之前的标记或时间点。若运行中的数据库数据出错,请使用 Time Travel;若数据库已被删除,则应在规定期限内使用 undelete。
在运维流程中加入七天窗口检查,并在事故日志中同时记录数据库 ID 和删除时间。这样有助于尽快提交正确的请求,避免浪费时间查找标识符或排查名称冲突。