数据库 · 发布 · 运维

数据库迁移前,怎样验收导出、恢复与回退

用合成恢复记录核对数据、权限和写入切换,明确失败停止条件与新写入的回退处理,整理可复查的迁移证据。

导出文件已经生成时,下一步是在隔离目标恢复并核对应用行为。文件存在、恢复命令结束和应用可以继续使用,分别需要不同证据。

本文以 PostgreSQL 的自有测试数据库为例。下列数据和时间均为合成材料,本站未导出、恢复或切换任何数据库。其他数据库或托管产品需另核对导出格式、版本、权限和平台限制。

切换前先确定写入与回退边界

在服务选型记录写明源/目标版本、扩展、编码、角色与权限、数据范围、允许的中断、负责人和预算。本例选择暂停测试写入后取得固定快照;生产持续写入需要单独设计增量同步与对账,不能直接照搬。

停止条件先写清:恢复有未解释错误、关键数据不一致、越权读取、目标无法承接关键写入,任一出现都暂缓切换。旧服务保留到什么时候、谁能回退,以及新环境收到写入后如何回传或合并,也应在开始前确认。发布与回滚可帮助梳理这些决策。

导出与恢复的技术范围

PostgreSQL 的 pg_dump 导出一个数据库;集群角色等全局对象需要另行处理。归档格式可交给 pg_restore,纯 SQL 格式使用相应 SQL 执行方式。请记录所用工具版本、格式、范围与警告,并在隔离目标演练。依据 pg_dump 文档和 pg_restore 文档,复核于 2026-10-04。

恢复会执行导出材料中的内容,应核对材料来源和目标连接,勿将演练指向生产库。恢复耗时要实测记录,不能用文件大小推断恢复窗口。导出恢复测试也不替代日常备份策略。

成功样例:按同一快照核对

合成演练:2026-10-04 09:00 +08:00,隔离测试库,写入已暂停
快照:snapshot-demo,源/目标均为记录中的版本
源摘要:orders=2;amount_cents总和=9000;id集合=001,002
恢复后:orders=2;amount_cents总和=9000;id集合=001,002
应用角色:读取自己的订单成功;读取其他用户订单被拒绝
测试写入:新增003成功;关联约束、序列与关键查询已核对
结论:这组演练检查符合预期;真实切换与持续写入未执行

核对不应只看行数。本例还比较金额、标识和权限;实际项目应选择业务约束、关键查询、附件引用及恢复范围。两份已脱敏 JSON 摘要可以交给 JSON 对比,它只比较提供的材料,不能读取数据库或证明查询取样正确。

失败样例:行数相同仍应停止

合成失败对照:同一快照、同一查询条件
源:orders=2;amount_cents总和=9000;id集合=001,002
目标:orders=2;amount_cents总和=8700;id集合=001,002
恢复日志:一项扩展未安装;错误是否影响金额未知
决策:停止切换;保留源和导出材料,核对错误与数据范围

相同的行数不足以解释金额差异,也不能直接认定扩展是唯一原因。记录快照、过滤条件、时区、工具版本和日志摘要;修正后重新恢复到干净的隔离目标,用同一检查矩阵复测。权限测试失败时同样停止。

切换后怎样决定回退

本例在目标新增测试订单003后,若把连接直接指回旧库,003可能不在旧库。应先暂停受影响写入,确定两端的权威记录,再按预先演练的同步或恢复方法处理,记录冲突与丢失范围;未核对数据时不要宣布回退成功。

完成演练时保存导出范围、恢复日志摘要、数据和权限检查、耗时、停止判据及回退数据处理。用选型记录保留采用或暂缓依据,也可用任务工作表记录每步实际观察与产物名称。缺少关键证据时保留待确认,不能写成生产迁移通过。