具有无效 DDL 的飞路迁移(对 MySQL 5.6 有效)

Flyway migration with invalid DDL (that was valid for MySQL 5.6)

我们有一个生产系统,我们使用 Flyway 进行数据库迁移。

最初是在 MySQL 5.5 上开发到 运行,后来我们的一些客户升级到 5.6,然后又升级到 5.7。

MySQL 5.7 与 5.6 相比发生了变化 - 定义为 NOT NULL 的日期时间字段在 5.7 的 SQL 脚本中必须具有默认值 - 而在 5.6 中允许不有一个默认值。

所以我们有一个迁移在 v11 中执行此操作,但在 v2 中有一个迁移使用(现在在 5.7 中)没有默认值的非法语法。

因此,如果我们尝试在空 Mysql 5.7 数据库上安装,Flyway 迁移将在第 2 步失败。

如果我们将 v2 迁移更改为具有默认值,以便 5.7 上的全新安装成功,如果我们 运行 对已迁移 v2 一次的现有安装进行迁移,则校验和将不匹配。

处理此问题的 'nice and clean' 方法是什么?

我正在考虑将 Flyway 基线用于 5.7 上的全新安装以跳过我们知道在 5.7 上会失败的步骤,然后有一个单独的 bootstrap 脚本来设置像 v1 和 v2 这样的架构已经完成,在我们 运行 飞路基线之前。

如果有更好的方法来处理这种情况并支持这两种情况,我非常想听听。

使用 Flyway 的 repair 命令将 5.6 数据库中的校验和与磁盘上的校验和重新对齐。