使用Evolve执行数据库迁移时遇校验和无效错误求解决
解决Evolve迁移时的"invalid checksum for migration"错误
问题根源
这个错误的核心原因是:你的本地文件V120__Insert_into_sa_report_proforma_detail.sql内容被修改过,但数据库的evolve_changelog表中已经存储了该脚本第一次执行时生成的校验值,两者校验结果不匹配。Evolve的校验机制是为了防止已执行的迁移脚本被随意修改,避免造成数据不一致或变更追溯混乱。
解决方法
根据你的实际需求选择对应的方案:
1. 确认需要修改已执行的脚本(比如修复脚本错误)
- 先核对数据库当前的数据状态,确保修改脚本不会引发数据冲突
- 生成当前脚本的新校验值:执行Evolve的
calculate-checksum命令evolve calculate-checksum "C:\\Users\\HP\\Desktop\\MywamProject\\mywam.saas.backend.api\\docker-database\\evolve\\catalogdb\\V120__Insert_into_sa_report_proforma_detail.sql" - 手动更新数据库的
evolve_changelog表,替换对应记录的校验值:UPDATE evolve_changelog SET checksum = '上面命令生成的新校验值' WHERE filename = 'V120__Insert_into_sa_report_proforma_detail.sql'; - 重新执行你的迁移命令即可
2. 误修改脚本,想恢复到原版本
- 从版本控制系统(比如Git)的历史记录中找回
V120__Insert_into_sa_report_proforma_detail.sql的原始版本,覆盖本地修改后的文件 - 再次执行迁移命令,校验会自动通过
3. 临时跳过校验(仅测试环境可用,生产环境严禁使用)
- 在迁移命令末尾添加
--skip-validation参数,强制跳过校验步骤:evolve migrate mysql -c "User Id=root;password=root;Host=localhost;Port=3306;Database=saas_catalogdb;" -l "C:\\Users\\HP\\Desktop\\MywamProject\\mywam.saas.backend.api\\docker-database\\evolve\\catalogdb" --skip-validation - 注意:这个操作会绕过Evolve的一致性校验,可能导致数据库变更记录和实际脚本不一致,生产环境绝对不能使用
内容的提问来源于stack exchange,提问作者Fatt Sky
相关产品推荐
相关产品推荐

