Cloudflare D1 を Alpha 版からマイグレートする
懐かし掲示板 BBS で使っている Cloudflare D1。SQLite データベースだが、コチラの Alpha 版が 2024-08-15 にクローズして正式版になるようで、マイグレーションしてねと通知が来たので対応する。
- 参考 : Cloudflare D1 docs - Alpha database migration guide
- コチラの公式の手順に沿って作業したのみ
- Prerequisites : 事前準備
- Wrangler CLI の最新版を入れておく
$ npm install -g wrangler
$ wrangler -v
⛅️ wrangler 3.64.0
-
- Verify that a database is alpha : 作業前の状態確認
version
がalpha
なことが分かる
$ wrangler d1 info legacy-of-bbs
⛅️ wrangler 3.64.0
-------------------
┌───────────────┬──────────────────────────────────────┐
│ DB │ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │
├───────────────┼──────────────────────────────────────┤
│ name │ legacy-of-bbs │
├───────────────┼──────────────────────────────────────┤
│ created_at │ │
├───────────────┼──────────────────────────────────────┤
│ version │ alpha │
├───────────────┼──────────────────────────────────────┤
│ num_tables │ 3 │
├───────────────┼──────────────────────────────────────┤
│ database_size │ 344 kB │
└───────────────┴──────────────────────────────────────┘
-
- Create a manual backup : バックアップを取る
$ wrangler d1 backup create legacy-of-bbs
┌──────────────────────────┬──────────────────────────────────────┬────────────┬────────┬───────┐
│ created_at │ id │ num_tables │ size │ state │
├──────────────────────────┼──────────────────────────────────────┼────────────┼────────┼───────┤
│ 2024-07-16T09:28:06.983Z │ yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy │ 3 │ 344 kB │ done │
└──────────────────────────┴──────────────────────────────────────┴────────────┴────────┴───────┘
-
- Download the manual backup : バックアップをダウンロードする
$ wrangler d1 backup download legacy-of-bbs yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
🌀 Downloading backup yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy from 'legacy-of-bbs'
🌀 Saving to /home/neo/Documents/Dev/GitHub/legacy-of-bbs/legacy-of-bbs.yyyyyyyy.sqlite3
🌀 Done!
-
- Convert the manual backup into SQL statements :
.sqlite3
ファイルを.sql
ファイル (SQL 文) に変換する
- Convert the manual backup into SQL statements :
$ sqlite3 --version
3.42.0 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0
$ sqlite3 ./legacy-of-bbs.yyyyyyyy.sqlite3 .dump > db.sql
- 4.1. Remove
BEGIN TRANSACTION
andCOMMIT;
from the file.- 生成した
db.sql
からトランザクション文を消す
- 生成した
- 4.2. Remove the following table creation statement:
CREATE TABLE _cf_KV
_cf_KV
テーブルの定義はなかったので無視
-
- Create a new D1 database : 新たな DB を作る
$ wrangler d1 create legacy-of-bbs-20240716
⛅️ wrangler 3.64.0
-------------------
✅ Successfully created DB 'legacy-of-bbs-20240716' in region APAC
Created your new D1 database.
[[d1_databases]]
binding = "DB" # i.e. available in your Worker on env.DB
database_name = "legacy-of-bbs-20240716"
database_id = "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"
-
- Run SQL statements against the new D1 database : SQL 文を流す
$ wrangler d1 execute legacy-of-bbs-20240716 --remote --file=./db.sql
⛅️ wrangler 3.64.0
-------------------
✔ ⚠️ This process may take some time, during which your D1 database will be unavailable to serve queries.
Ok to proceed? … yes
🌀 Executing on remote database legacy-of-bbs-20240716 (zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
Note: if the execution fails to complete, your DB will return to its original state and you can safely retry.
├ 🌀 Uploading zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz.zzzzzzzzzzzzzzzz.sql
│ 🌀 Uploading complete.
│
🌀 Starting import...
🚣 Executed 1166 queries in 0.04 seconds (2163 rows read, 2251 rows written)
Database is currently at bookmark 00000000-0000000f-00004dd0-843e4bf18c5f1d42f18aafa13380ea18.
┌────────────────────────┬───────────┬──────────────┬────────────────────┐
│ Total queries executed │ Rows read │ Rows written │ Database size (MB) │
├────────────────────────┼───────────┼──────────────┼────────────────────┤
│ 1166 │ 2163 │ 2251 │ 0.27 │
└────────────────────────┴───────────┴──────────────┴────────────────────┘
-
- Delete your alpha database : 古い DB を消す
$ wrangler d1 delete legacy-of-bbs
- 新 DB を確認する
$ wrangler d1 info legacy-of-bbs-20240716
⛅️ wrangler 3.64.0
-------------------
┌───────────────────┬──────────────────────────────────────┐
│ DB │ zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz │
├───────────────────┼──────────────────────────────────────┤
│ name │ legacy-of-bbs-20240716 │
├───────────────────┼──────────────────────────────────────┤
│ created_at │ 2024-07-16T09:34:13.005Z │
├───────────────────┼──────────────────────────────────────┤
│ num_tables │ 4 │
├───────────────────┼──────────────────────────────────────┤
│ running_in_region │ APAC │
├───────────────────┼──────────────────────────────────────┤
│ database_size │ 274 kB │
├───────────────────┼──────────────────────────────────────┤
│ read_queries_24h │ 0 │
├───────────────────┼──────────────────────────────────────┤
│ write_queries_24h │ 1 │
├───────────────────┼──────────────────────────────────────┤
│ rows_read_24h │ 2,163 │
├───────────────────┼──────────────────────────────────────┤
│ rows_written_24h │ 2,251 │
└───────────────────┴──────────────────────────────────────┘
というワケで、Alpha 版の DB から SQL 文を出力して、新 DB を立ててそちらに流す、という原始的なマイグレーション方法だった。
あとは Cloudflare Pages で新 DB を接続するように環境設定をし直して再デプロイすれば作業完了。