D1 は wrangler v3 で、データベースのバックアップ作成と復元を組み込みでサポートしています。スケジュールされた自動バックアップと、手動のバックアップ管理にも対応しています。
D1 はユーザーに代わって、データベースを 1 時間ごとに自動バックアップし、バックアップを 24 時間保持 します。バックアップの実行中は DB へのアクセスがブロックされます。ほとんどの場合は 1〜2 秒程度で、バックアップ中に到着したリクエストはキューに入ります。
手動で作成したバックアップを含め、これらのバックアップを表示・管理するには、d1 backup list <DATABASE_NAME> コマンドで各バックアップを一覧できます。
たとえば、existing-db という名前の D1 データベースのバックアップをすべて一覧するには、次を実行します。
wrangler d1 backup list existing-db
┌──────────────┬──────────────────────────────────────┬────────────┬─────────┐
│ created_at │ id │ num_tables │ size │
├──────────────┼──────────────────────────────────────┼────────────┼─────────┤
│ 1 hour ago │ 54a23309-db00-4c5c-92b1-c977633b937c │ 1 │ 95.3 kB │
├──────────────┼──────────────────────────────────────┼────────────┼─────────┤
│ <...> │ <...> │ <...> │ <...> │
├──────────────┼──────────────────────────────────────┼────────────┼─────────┤
│ 2 months ago │ 8433a91e-86d0-41a3-b1a3-333b080bca16 │ 1 │ 65.5 kB │
└──────────────┴──────────────────────────────────────┴────────────┴─────────┘%各バックアップの id で、特定のバックアップをダウンロードまたは復元できます。
大きなスキーマ変更、データの手動挿入や削除、利用中のデータベースの変更の前に、手動バックアップを取る習慣は有用です。D1 ではいつでもデータベースのバックアップを作成でき、バックアップはユーザーに代わって保存されます。既存データベースの変更を簡単にするには、マイグレーションの利用 も検討してください。
D1 データベースをバックアップするには、次が必要です。
- インストール済みの Cloudflare Wrangler CLI
- バックアップ対象の既存 D1 データベース
たとえば、example-db という名前の D1 データベースの手動バックアップを作成するには、d1 backup create を呼び出します。
wrangler d1 backup create example-db┌─────────────────────────────┬──────────────────────────────────────┬────────────┬─────────┬───────┐
│ created_at │ id │ num_tables │ size │ state │
├─────────────────────────────┼──────────────────────────────────────┼────────────┼─────────┼───────┤
│ 2023-02-04T15:49:36.113753Z │ 123a81a2-ab91-4c2e-8ebc-64d69633faf1 │ 1 │ 65.5 kB │ done │
└─────────────────────────────┴──────────────────────────────────────┴────────────┴─────────┴───────┘特に数メガバイト(MB)ありテーブルも多い、大きなデータベースでは、バックアップに数秒かかることがあります。出力の state 列で、バックアップの完了を確認できます。
バックアップをローカルにダウンロードするには、wrangler d1 backup download <DATABASE_NAME> <BACKUP_ID> を呼び出します。特定の D1 データベースで利用できるバックアップと ID を一覧するには、wrangler d1 backup list <DATABASE_NAME> を使います。
たとえば、example-db という名前のデータベースの特定バックアップをダウンロードするには、次を実行します。
wrangler d1 backup download example-db 123a81a2-ab91-4c2e-8ebc-64d69633faf1
🌀 Downloading backup 123a81a2-ab91-4c2e-8ebc-64d69633faf1 from 'example-db'
🌀 Saving to /Users/you/projects/example-db.123a81a2.sqlite3
🌀 Done!データベースバックアップは、ネイティブの SQLite3 形式で、現在の作業ディレクトリにダウンロードされます。ローカルデータベースを取り込むには、D1 への データ取り込みのドキュメント を参照してください。
バックアップの復元は、現在稼働中のデータベースをバックアップの内容で上書きします。バックアップに存在しないテーブル(とそのデータ)は、現在のデータベースからもなくなり、それらに依存するクエリは失敗します。
existing-db という名前の D1 データベースの過去のバックアップを復元するには、そのバックアップの ID を d1 backup restore に渡します。
wrangler d1 backup restore existing-db 6cceaf8c-ceab-4351-ac85-7f9e606973e3Restoring existing-db from backup 6cceaf8c-ceab-4351-ac85-7f9e606973e3....
Done!復元が完了すると、そのデータベースへのクエリは、すぐに現在の(復元後の)バージョンに対して実行されます。