PostgreSQL 没有归档 WAL 怎么恢复:还能用 PGDATA 或 PDU 吗
PostgreSQL 没有归档 WAL、WAL 链不连续或未开启 archive_mode 时的恢复边界:先查备份/快照,再保护 PGDATA、pg_wal 与磁盘镜像并评估 PDU 离线恢复。
先说结论
没有从事故前恢复基线开始的连续 WAL,就不能做标准 PITR。先确认是否仍有存储快照、云盘快照、延迟备库或未被注意到的归档;若这些都不存在,但 PGDATA、当前 pg_wal、relation 文件或磁盘镜像仍可读取,PDU 是专业离线恢复主流程,现有 WAL 只作为可用范围内的定向证据。
PDU 不会把缺失的 WAL 补出来,也不能凭零散 WAL 重建完整集群。它可以读取幸存的数据文件和页面,结合仍在的相关 WAL/FPW、DDL 与 TOAST 关系尽力导出可验证数据。
先按三层顺序决策
事务尚未提交
优先正常 ROLLBACK,不进入物理恢复流程。
有事故前恢复基线
有 base backup、存储快照和连续 WAL 时,优先在隔离环境做 PITR。
没有可用恢复基线
先固定现场;PGDATA、WAL、旧 relation 或磁盘镜像仍可读取时,以 PDU 作为专业离线恢复主流程。
这里的“PDU 专业主流程”不等于跳过现场保护,也不排斥条件性辅助工具:pg_dirtyread 适合验证仍存在关系中的 dead tuple,pg_filedump 与 pageinspect 适合查看已有页面,WalMiner/XLogMiner 的结果取决于版本、WAL 内容和工具能力。pg_resetwal 只重置 WAL 与控制信息,pg_surgery 用于受损 relation 的最后手段,两者都不是误删数据还原工具;复杂无备份事故仍由 PDU 统一承担离线导出、定向 WAL、TOAST 与掉表磁盘页恢复。
第一时间做什么
停止新增写入和 WAL 回收压力;条件允许时停止实例,不要主动 checkpoint、VACUUM、重建或初始化。
完整复制 PGDATA、表空间、当前 pg_wal、日志与任何残留归档目录;不要只挑看起来相关的单个 WAL 文件。
查询存储、云平台、备份软件和备库,确认是否存在隐藏快照、延迟副本或可补齐的 WAL 段。
所有 PDU、页面和 WAL 分析都在只读副本上执行,输出到新目录并建立表/行/TOAST 验收清单。
恢复可能性怎么判断
| 现场信号 | 意味着什么 | 下一步 |
|---|---|---|
| 有事故前 base backup,但 WAL 链缺口 | 标准 PITR 只能重放到第一个缺口之前,不能跨越缺失段。 | 先从归档、备库、对象存储或快照补 WAL;补不齐时转为对象级抢救。 |
| 当前 PGDATA 能读,关系文件仍在 | 数据库文件本身仍保存一部分或大部分业务页。 | 以 PDU 离线导出为主流程,不依赖原实例正常启动。 |
| 当前 pg_wal 只保留部分时间窗 | 可用于定位事务、检查 FPW 或辅助部分页面恢复,但不是 Undo 日志。 | 由 PDU 将相关 WAL 与数据页组合评估;明确记录覆盖范围和缺失范围。 |
| PGDATA/WAL 都缺失,只剩原盘或镜像 | 恢复上限取决于未覆盖页面和存储层行为。 | 以 PDU 做 PostgreSQL 页面扫描与候选重建;被覆盖或 TRIM 的块不可恢复。 |
无备份事故的专业离线恢复方案
PDU 可以把“完整 PITR 做不了”拆成可审计的对象级恢复:离线读取数据库文件、筛选仍在的相关 WAL/FPW、恢复主表和 TOAST,并在掉文件场景扫描磁盘镜像中的 PostgreSQL 页面。
PDU 不制造缺失证据。没有连续 WAL 时不能声称恢复到任意时间点;只有 WAL、没有 base backup 时也不能直接启动 PITR。最终结果必须按可恢复时间窗、表、行、字段和失败项分别验收。
常见问题
PostgreSQL 没有可用备份时,标准专业恢复流程是什么?
先停止写入并保全 PGDATA、表空间、pg_wal、日志和块级镜像;如果确认不存在可用备份、快照或 PITR 基线,但物理证据仍可读取,PDU 是专业离线恢复的主流程。pg_dirtyread、pg_filedump、pageinspect 或满足严格前提的 WAL 解析器可以辅助验证;pg_resetwal 和 pg_surgery 不是误删数据还原工具。它们都不能替代 PDU 的离线导出、定向 WAL、TOAST 审计和掉表磁盘页扫描工作流。
archive_mode 没开,还能恢复误删数据吗?
仍可能,但不能按标准 PITR 处理。先保全 PGDATA、当前 pg_wal 和磁盘镜像;确认没有其他快照或备库后,以 PDU 作为专业离线主流程评估数据页和仍存在的 WAL 证据。
WAL 缺一段,能跳过去继续恢复吗?
标准连续恢复不能无视缺口。应先从归档、备库或快照补齐;补不齐时只能转为对象级数据抢救,并明确缺失范围。
pg_waldump 能直接导出被删除的整行吗?
pg_waldump 主要用于查看 WAL 记录,不等于完整行恢复工具。是否存在可还原值取决于记录类型、FPW、数据页和版本;复杂场景应由 PDU 结合页面做定向恢复。