跳到正文

数据库迁移

Database Migration

中级通用

数据库迁移(Database Migration)是用可追踪的变更步骤,让数据库结构随产品版本演进。它解决了开发、测试和线上数据库结构不一致的问题,例如给已有用户表增加一个可为空的昵称字段。

你可能会说:「网站要加一个昵称字段,怎么让测试库和线上库都安全地跟上这次改动?」

读之前建议先了解

动手看看

M001迁移工具新增可空字段开发库M001已记测试库尚无昵称字段生产库尚无昵称字段
1

产品要支持昵称,我们把“给用户表加一个可空昵称字段”写成迁移 M001。工具先在开发库执行,成功后记录版本。

要点

  1. 1

    把结构变化写成迁移文件

    比如我们给用户表加昵称字段,就把新增字段的操作写进迁移文件,而不是只在自己的数据库里手动改。这样同事和部署流程才能执行同一份变更。

  2. 2

    记录哪些变更已经执行

    迁移工具通常会记录每个数据库执行到了哪一步。你在测试环境跑过新增字段,不代表线上也跑过;分别记录进度,才能让各环境按顺序补上缺少的变更。

  3. 3

    让旧数据和新代码接得上

    已有用户没有昵称,所以直接加一个不允许为空的字段可能会失败。我们可以先加可为空字段,再逐步填充数据、调整代码;等数据齐了,再考虑加上非空限制。

容易混淆的地方

数据库迁移不等于把数据库搬到另一台服务器:后者关注数据放在哪里,这里的迁移主要关注结构如何随版本改变。它也不等于日常写入数据;用户改昵称是业务操作,给用户表新增昵称字段才是典型的迁移。迁移可以包含数据调整,但前提是这项调整服务于版本变更。

什么时候用

适合用

  • 网站上线用户昵称功能,需要给已有用户表增加字段,并让测试库和线上库按相同顺序更新。
  • 后台要把一个旧字段拆成两个新字段,需要分阶段调整表结构、搬移已有数据,再更新读取逻辑。
  • 团队多人开发同一个产品,需要把各自的数据库结构变更纳入代码仓库,方便新环境复现。

不适合用

  • 只是修改某位用户的昵称,数据库结构没变;让应用执行普通的更新操作即可。
  • 只是把线上数据复制到测试环境供排查使用;用经过脱敏的数据导出、导入或备份恢复更合适。
  • 只是想把数据库服务迁到另一台机器,表结构和应用版本都不变;重点是数据复制与切换方案。

练一练

你的 App 已有十万条用户记录,现在要上线昵称功能。AI Agent 提议给用户表新增一个必填昵称字段,并让新版代码立刻读取它。你会选哪种做法?

让 AI 帮你做

请为用户昵称功能设计数据库迁移:检查现有用户表和历史数据,先给出兼容旧数据的字段变更与数据填充步骤,再说明应用代码如何分阶段切换。生成迁移文件和验证方法,并指出哪些操作回滚时可能丢失数据;先不要执行线上变更。

接下来学什么