Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

Time Travel とバックアップ

最終更新 Markdown で表示Agent セットアップ

Time Travel は、D1 のバックアップおよびポイントインタイムリカバリーの仕組みです。直近 30 日以内の任意の分に、データベースを復元できます。

  • Time Travel を有効にする必要はありません。常にオンです。
  • データベース履歴の保持と復元に、追加料金はかかりません。
  • Time Travel は ブックマーク を自動で作成します。手動でバックアップを開始したり、忘れないようにしたりする必要はありません。

定期バックアップや手動バックアップに頼らず、失敗したマイグレーションやスキーマ変更の前、WHERE 句のない DELETEUPDATE の前の状態へ戻せます。将来的には、本番データベースのフォークやコピーも直接できるようになります。

ブックマーク

Time Travel は、D1 の ブックマーク の仕組みを使って、特定の時点へ復元します。

  • 30 日より古いブックマークは無効で、復元ポイントとして使えません。
  • 特定のブックマークへ復元しても、より古いブックマークは削除されません。たとえば 10 分前の状態を表すブックマークへ復元したあと、さらに前の時点が必要だと分かっても、引き続き復元できます。
  • ブックマークは辞書式に並べ替えられます。並べ替えると、古いものから新しいものの順になります。
  • ブックマークは Unix タイムスタンプ(1970 年 1 月 1 日からの秒数)から導出できます。特定のタイムスタンプとブックマークの変換は決定的(安定)です。

ブックマークは Sessions API でも使われ、セッション内の逐次一貫性を保証します。

タイムスタンプ

Time Travel は 2 つのタイムスタンプ形式に対応しています。

要件

  • Time Travel のコマンドを使うには、Wrangler v3.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 フラグに渡します。

タイムゾーンを含む RFC3339 タイムスタンプを使うsh
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`

Workflows で D1 を R2 にエクスポートする

REST API と Cloudflare Workflows を使って、D1 データベースを R2 ストレージへ自動エクスポートできます。D1 データベースの状態を 30 日より長く保存したい場合に役立ちます。

手順は D1 データベースのエクスポートと保存 を参照してください。

補足

  • macOS と Windows では、コマンドラインで date +%s を実行すると Unix タイムスタンプをすぐに取得できます。
  • Time Travel では、既存データベースのクローンやフォークによる新しいコピー作成は、まだできません。将来的には、既存データベースを新しいデータベースへフォーク(クローン)したり、既存データベースを上書きしたりできるようになります。
  • データベースを復元できるのは、過去 30 日以内(Workers Paid プラン)または 7 日以内(Workers Free プラン)です。Time Travel の制限の詳細は 制限 を参照してください。

役に立ちましたか?