D1 内置支持使用 wrangler v3 创建和恢复数据库备份,包括定时自动备份和手动备份管理。
D1 每小时自动为您备份数据库,并保留备份 24 小时。备份期间会阻塞对数据库的访问。在大多数情况下,这只会持续一两秒,备份期间到达的任何请求将被排队。
要查看和管理这些备份(包括您手动创建的任何备份),可以使用 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 允许您下载或恢复特定备份。
在进行大型 schema 更改、手动插入或删除数据,或以其他方式修改您正在主动使用的数据库之前,创建手动备份是一个好习惯。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>。使用 wrangler d1 backup list <DATABASE_NAME> 列出给定 D1 数据库的可用备份(包括其 ID)。
例如,要下载名为 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!恢复完成后,对数据库的任何查询将立即查询当前(已恢复)版本。