我们有一个生产系统,我们使用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之类的架构,然后再运行飞路基线。
如果有更好的方法来处理这种情况并支持这两种情况,我非常希望了解它。
答案 0 :(得分:2)
使用Flyway的repair
命令,一旦进行了更改,就将5.6 DB中的校验和与磁盘上的校验和重新对齐。