跳转到内容
搜索文档

Time Travel 和备份

最后更新 查看 MarkdownAgent 设置

Time Travel 是 D1 的备份和时间点恢复方法,允许您将数据库恢复到过去 30 天内的任意分钟。

  • 您无需启用 Time Travel。它始终开启。
  • 数据库历史和恢复数据库不会产生额外费用。
  • Time Travel 自动代表您创建书签(bookmark)。您无需手动触发或记住启动备份。

通过不依赖定时备份和/或手动启动的备份,您可以回到迁移或 schema 更改失败、DELETEUPDATE 语句缺少特定 WHERE 子句之前的数据库状态,将来还可以直接 fork/复制 production 数据库。

书签(bookmark)

Time Travel 利用 D1 的书签(bookmark)概念恢复到某个时间点。

  • 超过 30 天的书签无效,不能用作恢复点。
  • 恢复到特定书签不会删除或移除较旧的书签。例如,如果您恢复到代表 10 分钟前数据库状态的书签,并确定需要恢复到更早的时间点,您仍然可以这样做。
  • 书签按字典序可排序。排序将书签列表从最早到最新排列。
  • 书签可以从 Unix 时间戳(自 1970 年 1 月 1 日以来的秒数)派生,特定时间戳与书签之间的转换是确定性的(稳定的)。

Sessions API 也利用书签来确保 Session 内的顺序一致性。

时间戳

Time Travel 支持两种时间戳格式:

  • Unix 时间戳,对应自 1970 年 1 月 1 日午夜以来的秒数。始终为 UTC。
  • JavaScript 日期时间字符串格式,是 ISO-8601 时间戳格式的简化版本。2023 年 7 月 27 日上午 11:18(Americas/New_York,EST)的有效日期时间字符串如下所示:2023-07-27T11:18:53.000-04:00

要求

  • 已安装 Wrangler v3.4.0 或更高版本以使用 Time Travel 命令。
  • 位于 D1 production 后端的数据库。您可以通过 wrangler d1 info DB_NAME 检查数据库是否使用此后端——输出显示 version: production

检索书签

您可以通过调用 d1 info 命令检索当前时间戳的书签,默认返回当前书签:

wrangler d1 time-travel info YOUR_DATABASE
🚧 Time Traveling...
⚠️ The current bookmark is '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683'
⚡️ To restore to this specific bookmark, run:
 `wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`

要检索过去某个时间戳的书签,传递带有有效 Unix 或 RFC3339 时间戳的 --timestamp 标志:

Using an RFC3339 timestamp, including the timezonesh
wrangler d1 time-travel info YOUR_DATABASE --timestamp="2023-07-09T17:31:11+00:00"

恢复数据库

要将数据库恢复到特定时间点:

wrangler d1 time-travel restore YOUR_DATABASE --timestamp=UNIX_TIMESTAMP
🚧 Restoring database YOUR_DATABASE from bookmark 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be

⚠️ This will overwrite all data in database YOUR_DATABASE.
In-flight queries and transactions will be cancelled.

 OK to proceed (y/N) … yes
⚡️ Time travel in progress...
 Database YOUR_DATABASE restored back to bookmark 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be

↩️ To undo this operation, you can restore to the previous bookmark: 00000085-ffffffff-00004c6d-2510c8b03a2eb2c48b2422bb3b33fad5

请注意:

  • 时间戳转换为确定性、稳定的书签。相同的时间戳始终代表相同的书签。
  • 正在执行的查询将被取消,并向客户端返回错误。
  • 恢复操作将返回一个书签(bookmark),允许您撤销并回滚数据库。

撤销恢复

您可以通过以下方式撤销恢复:

  • 记录 wrangler d1 time-travel restore 操作返回的先前书签
  • 直接恢复到过去、上次恢复之前的书签。

要获取较早状态的书签:

wrangler d1 time-travel info YOUR_DATABASE
🚧 Time Traveling...
⚠️ The current bookmark is '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683'
⚡️ To restore to this specific bookmark, run:
 `wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`

使用 Workflows 将 D1 导出到 R2

您可以通过 REST API 和 Cloudflare Workflows 自动将 D1 数据库导出到 R2 存储。如果您希望存储 D1 数据库状态超过 30 天,这可能很有用。

请参阅指南导出并保存 D1 数据库

说明

  • 您可以通过 macOS 和 Windows 上的 date +%s 命令快速获取 Unix 时间戳。
  • Time Travel 尚不允许您克隆或 fork 现有数据库到新副本。将来,Time Travel 将允许您 fork(克隆)现有数据库到新数据库,或覆盖现有数据库。
  • 您可以将数据库恢复到过去最多 30 天(Workers Paid 套餐)或 7 天(Workers Free 套餐)的某个时间点。有关 Time Travel 限制的详情,请参阅限制

这篇文档对您有帮助吗?