当前位置: 首页 > 知识库问答 >
问题:

使用无效 DDL 的飞行路线迁移(对 MySQL 5.6 有效)

皇甫鸿远
2023-03-14

我们在生产系统中使用Flyway进行数据库迁移。

最初它被开发为在MySQL 5.5上运行,后来我们的一些客户升级到5.6,然后升级到5.7。

与5.6相比,MySQL 5.7中有一个变化-定义为NOT NULL的datetime字段必须在SQL脚本中具有5.7的默认值,而在5.6中则允许没有默认值。

因此,我们在v11中有一个迁移做到了这一点,但在v2中有一个迁移使用了(现在在5.7中)非法语法而没有默认值。

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

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

处理这个问题的“漂亮而干净”的方法是什么?

我在考虑对5.7上的全新安装使用flyway baseline,以跳过我们知道会在5.7上失败的步骤,然后在运行Flyway baseline之前,有一个单独的引导脚本来设置模式,就像v1和v2会做的那样。

如果有更好的方法来处理这种情况并支持这两种情况,我很想听听。

共有1个答案

储臻
2023-03-14

一旦做出更改,使用Flyway的< code>repair命令将5.6 DB中的校验和与磁盘上的校验和重新对齐。

 类似资料:
  • 我有一个Spring启动应用程序,它使用Flyway在Postgres中进行数据库迁移。 它现在大约有四年了,所以我们正在谈论Flyway 4.0.3,Spring Boot 1.3.x和Postgres 9.x。版本可能会升级,但我想在这样做之前修复任何现有的问题。 与此同时,Postgres升级到了高于9.x的版本。不幸的是,由于包含不推荐使用的语法,一些现有的迁移已经过时。因此,现在使用全新

  • 我们使用Liquibase,现在在新项目中,我们必须使用Flyway。在liquibase中,迁移顺序在xml文件中,所以您可以指定什么是第一次迁移,什么是第二次迁移,它不依赖于名称。 所以,当一些开发人员添加新的迁移时,如果之前有人推动了新的迁移,那么他将在Git中遇到冲突,并且必须修复顺序。 这是如何在Flyway中实现的?如果并行添加迁移,如何控制顺序?

  • 我正在使用Spring启动1.4.1.发布与飞行方式。 执行模式迁移时,Flyway无法执行DML脚本。 我的资源文件夹具有以下结构 的飞行方式: 在空数据库上执行 Flyway 可以正常工作。它为数据库创建架构和数据。 但是一旦应该执行架构迁移(即 DML 和 DDL 脚本中的更改),Flyway 将显示以下错误消息: 我的应用程序开发属性如下所示:

  • 在类路径中:/db。迁移有迁移但flyway没有看到这一点,而是爱上了msg 2022-05-02 17:28:07.993INFO 45296 --- [ restartedMain]c. c. c. ConfigServiceProperty tySourceLocator:从服务器获取配置,地址为:http://localhost:8888/story2022-05-02 17:28:08.

  • 我为命令行java迁移执行了以下步骤: < li >创建java文件 当我执行迁移逗号时,它会像 警告:无法解析位置类路径:db/迁移 请查看下面的附件图片,它实际上是罐子。我已经提取了更多信息。

  • 我们有一个用于填充表的迁移,但是由于我们刚刚开始开发,因此此数据经常更改。因此,我们想知道我们是否可以更新这样的迁移脚本,并要求flyway回滚它(以前的版本)并再次执行它(新版本)。事实上,如果这是可能的,也就是说,如果迁移是可变的,那么我们想象需要回滚并再次执行每个后续迁移,以确保它们没有受到影响。我们认为,这可以避免移徙在发展过程中的扩散。