跳转到内容
搜索文档

备份(旧版)

最后更新 查看 MarkdownAgent 设置

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 数据库,您需要:

  1. 已安装 Cloudflare Wrangler CLI
  2. 要备份的现有 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-7f9e606973e3
Restoring existing-db from backup 6cceaf8c-ceab-4351-ac85-7f9e606973e3....
Done!

恢复完成后,对数据库的任何查询将立即查询当前(已恢复)版本。

这篇文档对您有帮助吗?