Flyway 3.0迁移校验和不匹配

bbc*_*per 44 maven flyway

将Flyway Maven插件从2.3升级到3.0后,我得到:

[错误]无法在项目xxx上执行目标org.flywaydb:flyway-maven-plugin:3.0:migrate(default-cli):org.flywaydb.core.api.FlywayException:验证失败.发现应用迁移与可用迁移之间存在差异:迁移校验和不匹配迁移V003__data_feed_sources_locations.sql:DB = 942424992,Classpath = 1117634405 - > [帮助1]

在其他一些项目上也有类似的错误.

如果我降级回2.3,迁移运行正常.这是否与用于计算校验和的不同平台编码有关?

任何解决方法,或更好的解决方案?

Axe*_*ine 82

Flyway 3.0将validateOnMigrate的默认值更改为true.

然而,这是一件好事,因为快速失败的精神,错误很快就会被发现.

在您的情况下,一些脚本在应用后确实发生了变化,这就是Flyway报告的内容.

您有两种选择:

  • 通过将validateOnMigrate设置为false来抑制错误(2.3默认行为)
  • 调用Flyway.repair()重新分配校验和

  • 如果您从命令行启动应用程序,请使用标志`--flyway.validate-on-migrate=false` (3认同)
  • 你好,我正在阅读http://flywaydb.org/documentation/maven/repair.html,确实有一行写着“纠正错误的校验和”,但是当我在 2.3 或 3.0 版本上运行“mvn Flyway:repair”时我得到的插件:“不需要修复元数据表`xyz`。`schema_version`。未检测到失败的迁移。”。是否有隐藏选项或命令行开关来重新计算哈希值? (2认同)
  • @PedroMadrid 这是一个 Spring Boot 标志,而不是 Flyway 标志。不要混淆他们! (2认同)

小智 16

添加到Axel Fontaine的答案:

我能够使用mvn flyway:修复,但我必须将flyway.locationsconfig属性指向包含我的db迁移脚本的文件夹.否则我会收到消息"修复元数据表xyz.schema_version没有必要.没有检测到失败的迁移." 像其他人提到的那样.

我用过mvn -Dflyway.locations=filesystem:<project dir>/src/main/resources/db/migrations flyway:repair,我看到元数据表中更新了校验和,解决了我的问题.


Pra*_*nth 7

首先,它查找校验和更改。如果我们更新已应用于数据库实例的迁移文件,则会发生这些更改。

FlywayException:验证失败:迁移版本 18.2.6 的迁移校验和不匹配

-> 应用于数据库:90181454

-> 本地解决:717386176

repair()方法将通过使用本地校验和值更新flyway_schema_history表来修复校验和问题。

但是,它会忽略同一迁移文件中的更新语句。因此,同一文件中的新更改将被忽略,因为flyway_schema_history表中已经有一个版本条目。setValidateOnMigrate() 方法在这种情况下无效。我们应该遵循增量方法,应该通过新文件提供架构更改。


aar*_*bor 6

我发现解决此问题的最简单方法是将模式表中的校验和更新为预期的值飞程。我知道我的迁移文件没有改变,而且数据库的当前状态是它需要的状态。我也不想花时间阅读文件和瞎搞用Flyway.repair()或其他方法可能潜在地把事情搞得一团糟,甚至更多。一个简单的sql更新就解决了