Maven Flyway 3.0迁移校验和不匹配

Maven Flyway 3.0迁移校验和不匹配,maven,flyway,Maven,Flyway,将Flyway Maven插件从2.3升级到3.0后,我得到: [错误]无法执行目标 org.flywaydb:FlywayMaven插件:3.0:project上的迁移(默认cli) xxx:org.flywaydb.core.api.FlywayException:验证失败。建立 应用迁移和可用迁移之间的差异: 用于迁移的迁移校验和不匹配 V003\数据\源\位置。sql:DB=9424992, Classpath=1117634405->[帮助1] 在其他项目上也有类似的错误 如果我降级回

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

[错误]无法执行目标 org.flywaydb:FlywayMaven插件:3.0:project上的迁移(默认cli) xxx:org.flywaydb.core.api.FlywayException:验证失败。建立 应用迁移和可用迁移之间的差异: 用于迁移的迁移校验和不匹配 V003\数据\源\位置。sql:DB=9424992, Classpath=1117634405->[帮助1]

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

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


是否有任何解决方法,或者更好的解决方案?

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

然而,这是一件好事,因为本着快速失败的精神,错误会更快地被发现

在您的案例中,一些脚本在应用后确实发生了更改,这就是Flyway报告的内容

您有两个选择:

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

要补充阿克塞尔·方丹的回答:

我能够使用mvn flyway:repair,但我必须将
flyway.locations
config属性指向包含我的db迁移脚本的文件夹。否则,我会得到消息“修复元数据表xyz.schema\u版本不必要。未检测到失败的迁移。”就像其他人提到的那样


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

问题发生在我更改V1_2_books.sql ddl文件之后,应该有更好的方法强制flyway识别新的更改

我尝试运行mvn flyway:repair,但没有成功,我最终将application.properties文件[datasource.flyway.url]中的模式url更改为books2

我还删除了以下文件(books是我的旧模式名)

datasource.flyway.url=jdbc:h2:file:~/books2
datasource.flyway.username=sa
datasource.flyway.password=
datasource.flyway.driver类名=org.h2.driver

我运行了应用程序,结果是:)

还有另一个解决方案。您可以从模式\u版本表中删除迁移。

我发现解决此问题的最简单方法是将模式表中的校验和更新为flyway期望的值。我知道我的迁移文件没有改变,数据库的当前状态就是它所需要的状态。我也不想花时间阅读文档和乱搞
Flyway.repair()
或其他可能会把事情搞得更糟的方法。一个简单的sql更新立即解决了这个问题。首先,它查找校验和更改。如果我们更新已应用于db实例的迁移文件,就会发生这些更改

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

->应用于数据库:90181454

->本地解决方案:717386176

repair()方法将通过使用本地校验和值更新flyway\u schema\u history表来解决校验和问题


但是,它会忽略同一迁移文件中的更新语句。因此,同一文件中的新更改将被忽略,因为flyway\u schema\u history表中已经有一个版本条目。setValidateOnMigrate()方法在此场景中无效。我们应该遵循增量方法,模式更改应该通过新文件提供。

只是想添加,以便通过修复更新校验和。Flyway必须能够访问所有迁移所在的目录。否则,flyway将继续它的业务和输出

“修复元数据表
xyz
schema\u version
中失败的迁移不是必需的。未检测到失败的迁移。”


需要使用flyway repair命令更新校验和(按照“升级过程”中的说明运行flyway命令,但将“迁移”替换为“修复”)

我建议您不要直接侵入数据库、sql脚本等。这可能很危险

示例:

./flywayrepare-user=root-password=changeme-url=jdbc:mysql://localhost/mypath -table=my\u flyway\u schema\u version\u table-locations=filesystem:/mypath\u sql\u scripts

如果您在本地数据库上运行,您可以删除flyway\u schema\u history table

您好,我正在阅读,确实有一行写着“更正错误的校验和”,但是当我在2.3或3.0版本的插件上运行“mvn flyway:repair”时,我得到了:“修复元数据表
xyz
schema\u version
不需要。没有检测到失败的迁移。”。是否有隐藏选项或命令行开关来重新计算哈希值?它应该已经修复了校验和。Flyway 3.0缺少一条消息告诉您这一点。该消息将包含在3.1中。在运行修复目标之前,我检查并保存了schema_版本flyway db表中的校验和值,以验证校验和是否会被修改,但事实并非如此。如果从命令行启动应用程序,使用标志
--flyway.validate on migrate=false
@PedroMadrid这是一个Spring引导标志,而不是flyway标志。别把他们弄糊涂了!在插入、更新或删除查询时将发生双重操作。我们将为部署执行类似操作。启动时有一些代码检查特定版本迁移文件的某些校验和是否不是我们想要的,并在启动前动态修复它们。在过去,当我们在一个旧的迁移脚本中发现一个只涉及边缘情况的bug时,我们不得不这样做。我们更新了脚本,添加了一些代码t
~ @~:rm books.mv.db 
~ @~:rm -r books.trace.db