数据库
Flyway迁移版本号冲突排查与修复
MySQL版本升级后Flyway报版本号重复,根因是旧手工兼容脚本残留,移出后重打包即可自动建库
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI B 56/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 88/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 98/100 ×0.15
适用场景
EXITERRORFlywayExceptionFound more than one migration with versionflyway初始化失败Application run failedMySQL版本升级迁移脚本冲突
解决思路
- 检查Flyway报错信息,定位冲突的版本号及对应文件路径(通常jar内BOOT-INF/classes/db/migration/下)
- 排查迁移目录中是否存在手工转换的兼容脚本(如mysql56.sql),其版本号与官方迁移脚本重复
- 将手工兼容脚本移出迁移目录(或重命名使其不再被Flyway扫描),同时清理application配置中为旧版本添加的flyway.enabled:false等临时开关
- 重新mvn package,验证新jar中不再包含干扰脚本(可用jar tf或unzip -l检查)
- 用空库启动,Flyway自动执行全部官方迁移脚本建表+初始数据,确认日志出现Successfully applied N migrations
- curl验证核心接口(如登录)返回正常token
适用边界 · 注意事项
- 如果生产库已有数据,不能直接清空重建,需先备份再处理冲突脚本,否则丢失业务数据
- 手工兼容脚本若包含业务定制SQL(非纯DDL),移出后需确认这些SQL是否仍需手动执行
- Flyway社区版不支持MySQL 5.6及以下,若目标库仍是5.x需先升级MySQL版本再启用Flyway
- 多模块项目中迁移脚本可能散落在不同模块的resources下,排查时需全局搜索同名版本号文件