具有无效 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 数据库中的校验和与磁盘上的校验和重新对齐。
我们有一个生产系统,我们使用 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 数据库中的校验和与磁盘上的校验和重新对齐。