Skip to main content

背景

Qingyu’Blog 最初使用 Cloudflare KV 作为存储后端,后来迁移到 D1(SQLite):
现在的 KV 不再存文章,只用于限流与去重(rate:cmt:* / rate:like:* / rate:view:* / liked:* / viewed:* / ai:*)。D1 是主存储。因此下面的迁移脚本只服务于从旧版 KV 单 key 存储升级的场景——全新部署不需要迁移。

迁移方式

本地执行

CLOUDFLARE_API_TOKEN 需要同时具备 KV 读取与 D1 写入权限;BLOG_D1_ID 用于确认目标数据库(非 dry-run 时必填)。

预览(推荐先执行)

仅输出 SQL,不实际写入。

正式迁移

脚本会把生成的 SQL 写入临时文件,再通过 npx wrangler@3.90.0 d1 execute blog --remote --file=... 执行。

GitHub Actions

  1. Actions 标签页 → Migrate KV to D1
  2. Run workflow → 选择 migrate 模式(另有 dry-run 模式)

迁移内容

脚本不迁移这些表:media、music、site_files、site_settings、stats_daily。
  • media / music 的元数据是后续版本才引入的,旧版 KV 里没有对应数据
  • site_settings(站点设置)与 site_files(站点产物)同理,需要在后台重新配置
  • stats_daily(每日聚合,趋势图数据源)也不会被回填,历史趋势从迁移之日起重新累计;当前计数在 stats 表里,不受影响
迁移前请备份 KV 数据。脚本本身使用 INSERT OR REPLACE,可重复执行(幂等),但被覆盖的既有 D1 行不会还原。

验证

迁移完成后脚本会打印类似 ✅ 迁移完成:N 篇文章及其评论/统计 + 管理员认证 的总结(+ 管理员认证 只在 admin:auth 存在时出现)。

相关页面