コンテンツにスキップ

タイムトラベルとバックアップ

タイムトラベルはD1のバックアップおよび時点復元のアプローチであり、過去30日間の任意の分にデータベースを復元することを可能にします。

  • タイムトラベルを有効にする必要はありません。常にオンになっています。
  • データベースの履歴とデータベースの復元には追加費用がかかりません。
  • タイムトラベルは自動的にブックマークを作成します。手動でバックアップをトリガーしたり、開始することを覚えておく必要はありません。

スケジュールされたバックアップや手動で開始されたバックアップに依存する必要がないため、失敗したマイグレーションやスキーマ変更、特定のWHERE句なしのDELETEまたはUPDATEステートメントの前にデータベースを復元することができ、将来的には本番データベースを直接フォーク/コピーすることも可能です。

用語

タイムトラベルはD1に「ブックマーク」という概念を導入します。ブックマークは特定の時点におけるデータベースの状態を表し、実質的には追加のみのログです。

  • ブックマークは辞書順にソート可能です。ソートはブックマークのリストを古い順から新しい順に並べます。
  • 30日以上前のブックマークは無効であり、復元ポイントとして使用できません。
  • 特定のブックマークにデータベースを復元しても、古いブックマークは削除されません。たとえば、10分前のデータベースの状態を表すブックマークに復元し、さらに以前の時点に復元する必要があると判断した場合でも、まだそれを行うことができます。

ブックマークはUnixタイムスタンプ(1970年1月1日からの秒数)から導出でき、特定のタイムスタンプとブックマーク間の変換は決定論的(安定)です。

タイムスタンプ

タイムトラベルは2つのタイムスタンプ形式をサポートしています:

  • Unixタイムスタンプ、これは1970年1月1日午前0時からの秒数に対応します。これは常にUTCです。
  • JavaScriptの日付時刻文字列形式、これはISO-8601タイムスタンプ形式の簡略版です。2023年7月27日午前11時18分(アメリカ/ニューヨーク(EST))の有効な日付時刻文字列は2023-07-27T11:18:53.000-04:00のようになります。

要件

  • Wrangler v3.4.0以降がインストールされていること。タイムトラベルコマンドを使用するために必要です。
  • D1の本番バックエンド上のデータベース。wrangler d1 info DB_NAMEを使用して、データベースがこのバックエンドを使用しているかどうかを確認できます - 出力にversion: productionが表示されます。

ブックマークを取得する

現在のタイムスタンプのブックマークを取得するには、d1 infoコマンドを呼び出します。これにより、デフォルトで現在のブックマークが返されます:

Terminal window
wrangler d1 time-travel info YOUR_DATABASE
🚧 タイムトラベル中...
⚠️ 現在のブックマークは '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683' です
⚡️ この特定のブックマークに復元するには、次を実行します:
`wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`

過去のタイムスタンプのブックマークを取得するには、有効なUnixまたはRFC3339タイムスタンプを持つ--timestampフラグを渡します:

RFC3339タイムスタンプを使用し、タイムゾーンを含む
wrangler d1 time-travel info YOUR_DATABASE --timestamp="2023-07-09T17:31:11+00:00"

データベースを復元する

特定の時点にデータベースを復元するには:

Terminal window
wrangler d1 time-travel restore YOUR_DATABASE --timestamp=UNIX_TIMESTAMP
🚧 データベース YOUR_DATABASE をブックマーク 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be から復元中
⚠️ これによりデータベース YOUR_DATABASE のすべてのデータが上書きされます。
進行中のクエリとトランザクションはキャンセルされます。
続行してもよろしいですか (y/N) … yes
⚡️ タイムトラベル進行中...
データベース YOUR_DATABASE がブックマーク 00000080-ffffffff-00004c60-390376cb1c4dd679b74a19d19f5ca5be に復元されました
↩️ この操作を元に戻すには、前のブックマークに復元できます: 00000085-ffffffff-00004c6d-2510c8b03a2eb2c48b2422bb3b33fad5

注意点:

  • タイムスタンプは決定論的で安定したブックマークに変換されます。同じタイムスタンプは常に同じブックマークを表します。
  • 進行中のクエリはキャンセルされ、クライアントにエラーが返されます。
  • 復元操作は、データベースを元に戻すためのブックマークを返します。

復元を元に戻す

復元を元に戻すには:

  • wrangler d1 time-travel restore操作の一部として返された前のブックマークをメモする
  • 最後の復元の前の過去のブックマークに直接復元する。

以前の状態からブックマークを取得するには:

Terminal window
wrangler d1 time-travel info YOUR_DATABASE
🚧 タイムトラベル中...
⚠️ 現在のブックマークは '00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683' です
⚡️ この特定のブックマークに復元するには、次を実行します:
`wrangler d1 time-travel restore YOUR_DATABASE --bookmark=00000085-0000024c-00004c6d-8e61117bf38d7adb71b934ebbf891683`

注意事項

  • macOSおよびWindowsのコマンドラインからUnixタイムスタンプを迅速に取得するには、date %+sを使用します。
  • タイムトラベルは、既存のデータベースを新しいコピーにクローンまたはフォークすることをまだ許可していません。将来的には、タイムトラベルを使用して既存のデータベースを新しいデータベースにフォーク(クローン)したり、既存のデータベースを上書きしたりできるようになります。
  • データベースを過去30日間(Workers Paidプラン)または7日間(Workers Freeプラン)までの時点に復元できます。タイムトラベルの制限の詳細については、Limitsを参照してください。