直接回答:核心做法是把 schema 变更脚本化、版本化,纳入 Git 管理,用迁移工具(Flyway、Liquibase、Alembic、Prisma Migrate 等)按版本顺序自动执行,并记录已应用的版本,保证所有环境可重复、可追溯地演进。
展开解析:工程要点:
- 每个变更一个文件,带递增版本号(如 V20240701__add_index.sql),提交后与代码同仓库评审。
- 工具维护 schema_history 表,启动或部署时对比并执行缺失版本,失败即中止防止半成品状态。
- 原则:迁移脚本只前进不修改已发布版本;线上变更要向后兼容(先加列、部署代码、再删旧列的 expand-and-contract 模式),避免新旧代码共存期间出错。
- 大表加索引、改列类型要评估锁表风险,MySQL 可借助 ONLINE DDL 或 gh-ost/pt-osc。
- CI 中先在临时库验证迁移可执行。
追问方向:如何回滚(反向脚本 vs 备份恢复)、多服务共享库时的兼容性策略。