备份与恢复问题
备份与恢复问题通常发生在误操作后回档、跨环境恢复、导入导出或迁移过程中。处理前应先保护现场,避免继续写入扩大影响。
常见问题
| 现象 | 可能原因 |
|---|---|
| 找不到可用备份 | 备份策略未开启、超出保留周期、实例或地域选错 |
| 恢复后缺少近期数据 | 恢复时间点早于数据写入时间 |
| 恢复后应用无法访问 | 连接信息、账号权限或 RLS 策略不匹配 |
| 导入失败 | 扩展缺失、角色不存在、表结构冲突 |
| 恢复耗时过长 | 数据量大、索引多、恢复目标资源不足 |
先停止风险操作
如果是误删、误更新或程序异常写入,先暂停相关写入入口,例如定时任务、后台批处理或线上版本。
暂停后再评估是否需要回档、逻辑修复或从备 份导出部分数据。
恢复前检查
- 确认目标实例、数据库和恢复时间点。
- 记录当前数据库状态,必要时先做一次导出。
- 评估恢复会覆盖哪些时间点之后的数据。
- 通知相关业务方,并安排低峰操作窗口。
恢复后校验
恢复完成后建议检查:
select count(*) from public.orders;
select max(created_at) from public.orders;
还应检查关键表行数、金额汇总、索引、扩展、RLS 策略和服务端连接配置。
逻辑导入失败
使用 pg_restore 或 SQL 文件导入失败时,常见原因包括:
- 源库启用了目标库不支持的扩展。
- dump 文件包含 owner 或 role,目标库不存在对应角色。
- 表已存在且结构不一致。
- 外键依赖顺序或数据完整性不满足。
可尝试使用 --no-owner,并先在测试库演练。
pg_restore --dbname="$DATABASE_URL" --no-owner backup.dump
后续改进
- 在高风险变更前创建手动备份或逻辑导出。
- 定期做恢复演练,验证备份可用性。
- 重要批处理脚本支持 dry run 和分批提交。
- 为核心表增加审计日志,降低回档范围。