我们有一个生产系统,我们使用 Flyway 进行数据库迁移。
最初它是为在 MySQL 5.5 上运行而开发的,后来我们的一些客户已升级到 5.6,然后升级到 5.7。
与 5.6 相比,MySQL 5.7 中有一个变化 - 定义为 NOT NULL 的日期时间字段必须在 5.7 的 SQL 脚本中具有默认值 - 而在 5.6 中允许没有默认值。
因此,我们有一个在 v11 中执行此操作的迁移,但在 v2 中,有一个迁移使用(现在在 5.7 中)非法语法,没有默认值。
因此,如果我们尝试在空的 Mysql 5.7 数据库上安装,Flyway 迁移将在第 2 步失败。
如果我们将 v2 迁移更改为默认值,以便 5.7 上的全新安装成功,那么如果我们在已经迁移过 v2 一次的现有安装上运行迁移,则校验和将不匹配。
处理此问题的“干净整洁”方法是什么?
我正在考虑在 5.7 上使用 Flyway 基线进行全新安装,以跳过我们知道在 5.7 上会失败的步骤,然后在运行之前使用一个单独的引导脚本来设置像 v1 和 v2 那样的架构飞行路线基线。
如果有更好的方法来处理这种情况并支持这两种情况,我非常想听听。
最佳答案
进行更改后,使用 Flyway 的 repair
命令将 5.6 DB 中的校验和与磁盘上的校验和重新对齐。
关于mysql - 具有无效 DDL 的 Flyway 迁移(对于 MySQL 5.6 有效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041159/