mysql - 具有无效 DDL 的 Flyway 迁移(对于 MySQL 5.6 有效)

标签 mysql flyway mysql-5.6 mysql-5.7

我们有一个生产系统,我们使用 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/

相关文章:

python - 无法将多个列表插入到 Python 中的单个 MySQL 查询中

mysql - 局域网内远程连接MYSQL(WAMP)数据库

java - 找到没有元数据表的非空架构 `schema_name`

mysql - 固定长度列最有效的数据类型

mysql - InnoDB 行大小在表增长时呈指数变化?

MySQL 锁定从属数据库

php - Android登录注册时响应不包含任何数据

php - 使用 TextArea 更新 SQL - 仅更新短字符串

flyway - 使用 Flyway 根据环境有条件地加载数据

mysql - Flyway迁移,无法从DataSource获取Jdbc连接