Umami 统计修复日志
背景
博客的 Umami 统计曾一度显示为 0。最初判断是数据库配置问题,后续排查确认并不是 Umami 前端统计脚本的问题,而是部署环境、Supabase 连接串和数据库数据状态叠加导致。
问题现象
EdgeOne Pages 构建 Umami 时,check-db 阶段失败。早期日志显示 Prisma 能检测到 DATABASE_URL,但执行实际查询时无法访问数据库:
Invalid `prisma.$queryRaw()` invocation:Raw query failed. Message: Can't reach database server修正连接串后,错误变为 TLS 证书链校验失败:
Error opening a TLS connection: self-signed certificate in certificate chain这说明网络连通性已经恢复,剩余问题集中在 TLS 参数和数据库状态。
修复过程
1. 修正 Supabase 连接串
原连接串存在拼接错误,把 direct connection 和 pooler connection 混在了一起,导致部署环境无法正确解析数据库地址。
最终改为 Supabase pooler 连接方式,并保留 SSL:
DATABASE_URL="postgresql://postgres.<project-ref>:<password>@aws-1-ap-southeast-2.pooler.supabase.com:5432/postgres?sslmode=require&uselibpqcompat=true"其中:
- 使用 pooler,避免部署环境不支持 Supabase direct connection 的 IPv6 问题;
- 使用
sslmode=require保持 TLS 加密; - 加上
uselibpqcompat=true,避免 Node/Postgres 客户端把sslmode=require当成严格证书链校验处理。
2. 确认数据库被重新初始化
连接修复后,Umami 能重新跑 Prisma 迁移,但数据库里只剩默认数据:
public.user:1 条;public.website:1 条;public.session:几乎为空;public.website_event:几乎为空。
迁移时间集中在一次构建过程中,说明当前库已经接近重新初始化状态,而不是单纯统计查询失败。
3. 从导出的 JSON 恢复业务数据
后续找到了旧项目导出的业务表 JSON。有效数据包括:
public.user.jsonpublic.website.jsonpublic.session.jsonpublic.website_event.json
其中核心数据量约为:
public.session 2364public.website_event 4363public.website 3public.user 1由于 Supabase SQL Editor 对单次查询大小有限制,完整 SQL 无法一次运行,最终将恢复 SQL 拆成小分片,按顺序导入:
01_restore_user.sql02_restore_website.sql03_session_001.sql ... 03_session_012.sql04_event_001.sql ... 04_event_022.sql99_verify_after.sql导入策略使用 INSERT ... ON CONFLICT ... DO UPDATE,避免已有主键导致恢复中断。
当前结果
恢复完成后,数据库核心表已经回填:
user 1website 4session 2196website_event 4469website 比旧备份多 1 条,是重新初始化时生成的默认站点;website_event 比旧备份略多,应该包含恢复期间或修复后新写入的访问事件。
整体上,Umami 的历史访问统计已经基本恢复可用。
后续处理
恢复后需要继续做几件事:
- 在 Supabase 开启或确认备份策略,最好启用 PITR;
- 重置曾经暴露过的数据库密码;
- 更新 EdgeOne / Umami 的
DATABASE_URL; - 在 Umami 后台清理多余的默认站点;
- 确认新访问能正常写入;
- 谨慎处理 RLS,不要在不了解 Umami 访问方式的情况下直接启用。
结论
这次问题不是单一 bug,而是三个问题叠加:
- 数据库连接串格式错误;
- 部署环境与 Supabase direct connection / TLS 参数不匹配;
- 数据库被重新初始化,历史统计表数据丢失。
最终通过修正连接串、调整 TLS 参数、再从 JSON 导出数据分片恢复,完成了 Umami 统计数据修复。
💡 登录后弹幕将带认证标识,点此登录喵~
弹幕经站长审核后展示喵~ 文明发言,共建和谐评论区
引用此文 (Cite this article)
已固定版本 a0017b6文章修订历史版本 (Git Revision History)
8 次版本| 快捷对比 | 比对单选 | 修订时间 (快照永久链) | 贡献者 | 体量变化 | 编辑摘要 / Git Commit 记录 | Git |
|---|---|---|---|---|---|---|
| ( 当前 | ) | 2026年10月06日 (二) 06:52 | Y yaoxiovo | 4,213 字节 (+32) | /* wiki */ 新增 related 编排互链体系与延伸阅读指引喵 | a0017b6 | |
| ( | ) | 2026年05月23日 (六) 02:20 | Y yaoxiqaq | 4,181 字节 (+3778) | docs: update Umami repair log | 241d2e0 | |
| ( | ) | 2026年05月05日 (二) 02:36 | Y yaoxiovo | 403 字节 (+190) | seo: improve Umami issue post metadata | 474b440 | |
| ( | ) | 2026年04月03日 (五) 14:53 | Y yaoxiovo | 213 字节 (+213) | 更新文章 | 1b5f7a7 | |
| ( | ) | 2026年01月01日 (四) 15:00 | Y yaoxiovo | 0 字节 (-2386) | Update 143 files: config.ts, 163-free-domain-email.md, acg-randompic-api.md, across-nat.md, aicode-prompt.md, alist-for-aliyun.md, alist-web.md, anuneko.md, asf.md, astrov3-redirects.md, atpx-fun-blog.md, auto-icp-query.md, ...omitted 131 file(s) | 5636e28 | |
| ( | ) | 2026年01月01日 (四) 14:51 | Y yaoxiovo | 2,386 字节 (+2386) | Update 145 files: config.ts, config.ts.bak, 163-free-domain-email.md, acg-randompic-api.md, across-nat.md, aicode-prompt.md, alist-for-aliyun.md, alist-web.md, anuneko.md, asf.md, astrov3-redirects.md, atpx-fun-blog.md, ...omitted 133 file(s) | 0aa0d06 | |
| ( | ) | 2026年01月01日 (四) 10:06 | Y yaoxiovo | 0 字节 (-2386) | 部署 | 49ce448 | |
| ( | 上一 ) | 2025年12月27日 (六) 13:19 | R root | 2,386 字节 (+2386) | 初始版本 初次提交 | 881d33a |
链入页面 (What links here)
1 个来源 · 1 条链接延伸阅读 (See Also)
1 篇- 探秘本站的云端地基:双活 CDN、Serverless 统计与边缘安全架构实践
深度拆解本站背后的云服务拓扑:国内腾讯云 EdgeOne、国外 Cloudflare Pages、基于 Supabase 的自托管 Umami 统计以及 Cloudflare Workers 的边缘中转实践。
互链 2026-06-28
相关文章 (Related Pages)
2 篇评论 · 0
💡 登录后评论将带认证标识,点此登录喵~