Time Travel は、D1 のバックアップおよびポイントインタイムリカバリーの仕組みです。直近 30 日以内の任意の分に、データベースを復元できます。
- Time Travel を有効にする必要はありません。常にオンです。
- データベース履歴の保持と復元に、追加料金はかかりません。
- Time Travel は ブックマーク を自動で作成します。手動でバックアップを開始したり、忘れないようにしたりする必要はありません。
定期バックアップや手動バックアップに頼らず、失敗したマイグレーションやスキーマ変更の前、WHERE 句のない DELETE や UPDATE の前の状態へ戻せます。将来的には、本番データベースのフォークやコピーも直接できるようになります。
Time Travel は、D1 の ブックマーク の仕組みを使って、特定の時点へ復元します。
- 30 日より古いブックマークは無効で、復元ポイントとして使えません。
- 特定のブックマークへ復元しても、より古いブックマークは削除されません。たとえば 10 分前の状態を表すブックマークへ復元したあと、さらに前の時点が必要だと分かっても、引き続き復元できます。
- ブックマークは辞書式に並べ替えられます。並べ替えると、古いものから新しいものの順になります。
- ブックマークは Unix タイムスタンプ ↗(1970 年 1 月 1 日からの秒数)から導出できます。特定のタイムスタンプとブックマークの変換は決定的(安定)です。
ブックマークは Sessions API でも使われ、セッション内の逐次一貫性を保証します。
Time Travel は 2 つのタイムスタンプ形式に対応しています。
- Unix タイムスタンプ ↗。1970 年 1 月 1 日午前 0 時からの秒数です。常に UTC です。
- JavaScript の date-time 文字列形式 ↗。ISO-8601 タイムスタンプ形式を簡略化したものです。2023 年 7 月 27 日午前 11:18(Americas/New_York、EST)の有効な date-time 文字列は
2023-07-27T11:18:53.000-04:00です。
- Time Travel のコマンドを使うには、
Wranglerv3.4.0以降が必要です。 - 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次の点に注意してください。
- タイムスタンプは決定的で安定したブックマークに変換されます。同じタイムスタンプは常に同じブックマークを表します。
- 実行中のクエリはキャンセルされ、クライアントにはエラーが返ります。
- 復元操作は、取り消し と元に戻しに使える ブックマーク を返します。
復元を取り消すには、次のいずれかを行います。
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 では、既存データベースのクローンやフォークによる新しいコピー作成は、まだできません。将来的には、既存データベースを新しいデータベースへフォーク(クローン)したり、既存データベースを上書きしたりできるようになります。
- データベースを復元できるのは、過去 30 日以内(Workers Paid プラン)または 7 日以内(Workers Free プラン)です。Time Travel の制限の詳細は 制限 を参照してください。