使用无效DDL的Flyway迁移(对MySQL 5.6有效)

时间:2016-10-14 10:38:55

标签: mysql flyway mysql-5.6 mysql-5.7

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

最初开发它是为了在MySQL 5.5及更高版本上运行,我们的一些客户已经升级到5.6然后升级到5.7。

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

因此我们在v11中进行了迁移,但是在v2中有一个迁移使用(现在为5.7)非法语法而没有默认值。

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

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

处理这个问题的'干净整洁'是什么?

我在考虑使用Flyway基线进行5.7上的全新安装,跳过我们知道在5.7上失败的步骤然后有一个单独的bootstrap脚本来设置v1和v2之类的架构,然后再运行飞路基线。

如果有更好的方法来处理这种情况并支持这两种情况,我非常希望了解它。

1 个答案:

答案 0 :(得分:2)

使用Flyway的repair命令,一旦进行了更改,就将5.6 DB中的校验和与磁盘上的校验和重新对齐。