根据 Flyway,原始 SQL 脚本现在无效

Posted

技术标签:

【中文标题】根据 Flyway,原始 SQL 脚本现在无效【英文标题】:Original SQL script now invalid according to Flyway 【发布时间】:2021-11-03 07:18:47 【问题描述】:

我们有一个已经投入生产一段时间的 Spring Boot 应用程序。我们使用 Flyway 来管理数据库迁移。我刚刚从 2.4.5 升级到 Spring boot 2.5.4,随之升级到 Flyway 7.7.3。

在全新的本地环境中执行所有迁移时,迁移现在由于以下注释的语法问题而失败:

---*********************---
-- ** AUDITING TABLES ** --
---*********************---

我想这在已经执行此迁移的环境中不会成为问题,但是鉴于迁移时的校验和比较无法编辑原始文件,对于具有新数据库的新环境,解决此问题的最佳方法是什么?

我当前的版本控制只包括一个主要版本,即 V2、V3 等。我的想法是摆脱 V2(有问题的脚本)并引入 V2.1,这将是带有错误评论部分的 V2 的精确副本删除。然后我会将ignoreMissingMigrationsignoreIgnoredMigrations 都设置为true

这听起来像是解决这个问题的正确方法吗?

提前致谢。

【问题讨论】:

我应该提到我使用的是 mysql 5.7。初步测试表明我在 OP 中提到的方法似乎有效。除非有人提出更好的选择,否则很可能会坚持使用这种方法。 你的 sql 文件的编码字符集是什么?较低版本的 flyway 没有问题,但是您所有的 sql 文件都应该是 UTF-8 或 US7ASCII 或者如果它不同,您必须自己指定编码:flywaydb.org/documentation/configuration/parameters/encoding 【参考方案1】:

更改脚本然后执行 flyway repair 将是理想的解决方案 - 这将纠正校验和。

假设此选项由于某种原因不可用(如果我们可以修复它,知道它是什么会很有帮助!),以上听起来是正确的。 ignoreMissingMigrations 表示您的旧部署不会反对 V2 不存在,ignoreIgnoredMigrations 表示他们不会反对 V2.1 存在。缺点是这些忽略在长期内可能无效 - 例如,它们不会捕捉到后来无意丢失的脚本。

【讨论】:

谢谢@Julia。你可能是对的,flyway repair 是要走的路。我确实遇到过,但它似乎是更具侵入性的选择,并且不能 100% 确定潜在的副作用。我还没有部署到任何实时环境,所以我有时间恢复到那个选项。

以上是关于根据 Flyway,原始 SQL 脚本现在无效的主要内容,如果未能解决你的问题,请参考以下文章

flyway的快速入门教程

尝试在 sql-server 上迁移时 Flyway 挂起

使用 Spring Boot 记录 Flyway sql

Flyway迁移无法识别beforeValidate.sql

使用flyway迁移到Google Cloud SQL,应该复制哪些jar文件?

Flyway 可以使用 Sql Express LocalDB