Flyway Validate failed: Migration checksum mismatch for migration version 1.0.0.01 错误

在运行Spring Boot应用时遇到Flyway迁移错误,具体为版本1.0.0.01的校验失败,数据库中记录的Checksum与本地解析的不同。尝试通过执行mvn flyway:migrate命令解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在运行系统的时候出现错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.api.FlywayException: Validate failed: Migration checksum mismatch for migration version 1.0.0.01
-> Applied to database : 1062144176
-> Resolved locally : 1432425380

 

尝试使用命令:

> mvn flyway:migrate

来对校验进行合并

 

<think>我们已知错误Flyway校验和不匹配,具体发生在版本20250823.2的迁移脚本上。 根据提供的配置,我们注意到Flyway的迁移脚本位置在`classpath:db/migration`,并且使用了指定的数据源配置。 错误原因:迁移脚本`V20250823.2__*.sql`的内容在应用后被修改,导致Flyway计算出的校验和与数据库`flyway_schema_history`表中记录的校验和不一致。 解决方案: 1. 修复校验和(推荐):使用Flyway的repair命令。 2. 恢复迁移文件:如果修改是意外的,从版本控制中恢复该文件。 3. 创建新迁移:如果修改是必要的,创建新的迁移文件并应用。 4. 临时禁用验证(仅开发):设置`spring.flyway.validate-on-migrate=false`。 由于配置中使用了Spring Boot的Flyway自动配置,我们可以通过以下步骤操作: 步骤1:尝试使用Flyway的repair命令 在Spring Boot项目中,可以通过Maven或Gradle插件执行repair。 如果使用Maven,在pom.xml中配置Flyway插件: ```xml <build> <plugins> <plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>7.15.0</version> <!-- 使用与Spring Boot兼容的版本 --> <configuration> <url>${datasource.url.1}</url> <user>${datasource.user.1}</user> <password>${datasource.password.1}</password> <locations>classpath:db/migration</locations> </configuration> </plugin> </plugins> </build> ``` 然后运行命令:`mvn flyway:repair` 如果使用Gradle,在build.gradle中配置: ```groovy plugins { id "org.flywaydb.flyway" version "7.15.0" } flyway { url = project.properties['datasource.url.1'] user = project.properties['datasource.user.1'] password = project.properties['datasource.password.1'] locations = ['classpath:db/migration'] } ``` 然后运行:`gradle flywayRepair` 步骤2:如果修复命令执行成功,重新启动应用。 步骤3:如果不想使用repair,或者repair无法解决问题,可以考虑手动处理: - 检查迁移文件`V20250823.2__*.sql`的内容,确认是否被修改。如果是,恢复它(从版本控制中检出)或者创建一个新的迁移文件(如果修改是必要的)。 - 如果修改是必要的,那么应该创建新的迁移文件(例如`V20250823.3__fix_issue.sql`),然后删除或忽略旧文件(但注意:旧文件已经被应用,所以不能删除,只能通过repair修复校验和,或者通过新迁移来修正)。 步骤4:如果问题在开发环境中,并且希望快速启动,可以临时禁用验证(不推荐长期使用): 在application.properties中添加: ```properties spring.flyway.validate-on-migrate=false ``` 注意:禁用验证后,应用可以启动,但下次启动前应解决校验和问题,否则生产环境可能出错。 预防措施:在团队协作中,一旦迁移脚本被应用,就不要再修改它。任何后续修改都应通过新的迁移脚本完成。 根据上述分析,给出具体解决方案。</think>### Flyway校验和错误解决方案(基于您的配置) 根据您提供的Flyway配置和错误信息,以下是针对性的解决方案: ```properties # 您的Flyway配置 spring.flyway.locations=classpath:db/migration spring.flyway.url=${datasource.url.1} spring.flyway.user=${datasource.user.1} spring.flyway.password=${datasource.password.1} ``` #### 问题原因: 版本为`20250823.2`的迁移文件(位于`src/main/resources/db/migration/V20250823.2__*.sql`)内容被修改,导致Flyway计算的校验和与数据库`flyway_schema_history`表中存储的校验和不匹配。 #### 推荐解决方案: 1. **使用Flyway Repair修复校验和**(推荐): ```bash # Maven项目 mvn flyway:repair -Dflyway.url=jdbc:your_db_url -Dflyway.user=your_user -Dflyway.password=your_pwd # Gradle项目 gradle flywayRepair -Dflyway.url=jdbc:your_db_url -Dflyway.user=your_user -Dflyway.password=your_pwd ``` 修复后Flyway会更新`flyway_schema_history`表的校验和值 2. **恢复原始迁移文件**: - 从版本控制(Git)恢复`V20250823.2__*.sql`文件的原始版本 - 或手动核对文件内容与数据库当前状态是否一致 3. **创建修正迁移**(当修改必需时): ```sql -- 新建文件:src/main/resources/db/migration/V20250823_2_1__fix_checksum.sql -- 包含必要的修正SQL ``` 4. **临时解决方案(仅限开发)**: 在`application.properties`中添加: ```properties spring.flyway.validate-on-migrate=false spring.flyway.clean-on-validation-error=true ``` #### 配置注意事项: 1. 确保`${datasource.url.1}`等占位符在运行时能正确解析 2. 检查迁移文件命名规范:`V20250823.2__Description.sql`(双下划线) 3. 验证数据库用户是否有`flyway_schema_history`表的读写权限 > **生产环境警告**:不要使用`clean-on-validation-error`选项,可能导致数据丢失!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HoneyMoose

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值