Time Travel 是 D1 的备份和时间点恢复方法,允许您将数据库恢复到过去 30 天内的任意分钟。
- 您无需启用 Time Travel。它始终开启。
- 数据库历史和恢复数据库不会产生额外费用。
- Time Travel 自动代表您创建书签(bookmark)。您无需手动触发或记住启动备份。
通过不依赖定时备份和/或手动启动的备份,您可以回到迁移或 schema 更改失败、DELETE 或 UPDATE 语句缺少特定 WHERE 子句之前的数据库状态,将来还可以直接 fork/复制 production 数据库。
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。
- 已安装
Wranglerv3.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 标志:
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`您可以通过 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 限制的详情,请参阅限制。