数据库备份(Neon 平台级)

Neon 平台自带的备份能力保护你的数据,应用代码完全不碰备份。这是最安全的方式:不写任何复制逻辑,也就没有复制出错、损坏数据的风险。

核心理念

备份是 Neon 平台的事,不是应用的事。

本项目的应用层(Next.js + Prisma)只负责读写数据库,它并不知道也不需要知道备份的存在。备份、恢复、时间点回滚全部由 Neon 平台承担,你只需要在 Neon 控制台点几下,或执行几条 SQL,即可获得:

  • 自动备份:Neon 每个项目都自动保留数据历史
  • 时间点恢复(PITR):把数据库恢复到过去任意时刻
  • 分支(Branch):从任意历史点分出独立的测试库,用完即弃
  • 只读副本(Read replica):在不影响主库的前提下做只读查询/导出

⚠️ 为什么不让应用层备份?自动跨库复制生产数据是高风险操作,写错一条逻辑就可能损坏数据、覆盖主库。Neon 的备份是经过大规模验证的成熟能力,可靠得多。应用层唯一该做的,就是不主动删除/覆盖重要数据

数据布局建议(重要/隐私数据优先放主库)

本项目支持多数据库(1 主库 + 最多 4 副库,见 环境变量)。按"重要数据靠前、冷数据靠后"的原则,建议这样布局:

用途放什么
主库 DATABASE_URL核心数据用户、工作区、文件、聊天、分享、外部连接、SSH 主机等一切重要/隐私数据
副库 DATABASE_URL_2冷数据审计日志、邮箱验证码(低优先级、可重建)
副库 DATABASE_URL_3冷数据扩展(可选)更多冷数据(当前版本仅审计/验证码可路由)
其余库备份盘不接入应用,仅作为 Neon 备份/恢复的目标

说明:应用目前只会audit(审计日志)和 verification(邮箱验证码)路由到副库(MULTI_DB_COLD_TABLES)。其余库如果不接入应用,就纯粹当作 Neon 的备份/冗余资源。你可以按需创建多个 Neon 项目或数据库,把重要的都放主库,其余做备份。

启用 Neon 备份(推荐做法)

下面以 Neon 控制台操作为主。每一步都不需要改代码、不需要重新部署。

1. 确认自动备份已开启

Neon 的每个项目默认都会保留数据历史(用于时间点恢复)。到 Neon 控制台 → 你的项目 → Settings,确认没有关闭保留。

2. 手动创建备份快照(分支)

如果希望有一个固定的、与主库解耦的备份副本,可以创建一个分支:

  1. Neon 控制台 → 你的项目 → Branches
  2. Create branch
  3. 选择从主分支(main)的当前/历史点分叉
  4. 命名如 backup-2026-08-11

这个分支就是主库的一个完整副本,可以长期保留作为备份。它不占用主库读写,也不影响应用。

分支会在创建时保留主库当时的数据。之后主库继续写,分支不会自动跟随——这正是备份的意义:它定格在创建那一刻,是可靠的历史快照。

3. 灾难恢复(恢复备份)

如果主库数据出了问题,两种恢复方式:

  • 时间点恢复(PITR):Branches → 在主分支上点 Restore,选择恢复到某个过去时刻,Neon 会把主分支回滚到那一刻。
  • 从备份分支恢复:Branches → 在备份分支上点 Set as primary / Restore,把备份分支提升为主库。

恢复是 Neon 平台的操作,应用只需在恢复后继续正常读写即可。如果换了一个新的连接串,只需在 Vercel 更新 DATABASE_URL 并重新部署。

4. 只读副本 / 导出(可选)

如果需要离线备份或把数据导出到别处:

  • Neon 控制台 → 项目 → Read replicas,创建一个只读副本
  • 用任意 Postgres 客户端连接只读副本,执行 pg_dump 导出
pg_dump "postgresql://...readonly..." > backup.sql

只读副本不影响主库,适合做定期冷备。

常见问题

Q:应用层需要做备份吗? 不需要。应用只读写数据库。备份、恢复全在 Neon 平台完成,应用代码无需任何改动。

Q:备份分支会占用数据库额度吗? 分支是一个独立副本,会占用你的 Neon 存储额度(免费版额度有限)。建议保留 1~2 个关键备份分支即可,或用时间点恢复代替长期分支。

Q:我需要为每个副库单独备份吗? 是的。如果副库(冷数据)也重要,请对每个库各自做 Neon 备份(在对应 Neon 项目/Branches 里创建分支)。主库和每个副库是独立的,备份也是独立的。

Q:数据库被误删 / 误改,能恢复吗? 能。用 Neon 的时间点恢复(PITR)把数据库回滚到误操作之前的时间点即可。前提是 Neon 的数据保留期还没过(免费版默认保留一段时间,建议查看 Neon 控制台的保留设置)。

Q:备份会影响应用稳定性吗? 不会。 Neon 备份、分支、只读副本都在平台侧进行,不占用主库读写,不经过应用代码。应用始终只连一个 DATABASE_URL,行为与平时完全一致。

关键点总结

  1. 备份 = Neon 平台能力,应用零改动、零风险
  2. 重要/隐私数据放主库,冷数据才放副库
  3. Branches(分支) 做固定快照备份,用 时间点恢复(PITR) 做灾难恢复
  4. 只读副本用于导出/冷备,不影响主库
  5. 定期在 Neon 控制台创建分支,并把连接串放在安全的地方