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

使用 DML 和 DDL 脚本的飞行路线架构迁移失败

东方玉泽
2023-03-14

我正在使用Spring启动1.4.1.发布与飞行方式。

执行模式迁移时,Flyway无法执行DML脚本。

我的资源文件夹具有以下结构 的飞行方式:

在空数据库上执行 Flyway 可以正常工作。它为数据库创建架构和数据。

但是一旦应该执行架构迁移(即 DML 和 DDL 脚本中的更改),Flyway 将显示以下错误消息:

Caused by: org.flywaydb.core.api.FlywayException: Schema `testDB` contains a failed migration to version 1.02 !
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:196) ~[flyway-core-3.2.1.jar:na]
    at org.flywaydb.core.internal.command.DbMigrate$2.doInTransaction(DbMigrate.java:156) ~[flyway-core-3.2.1.jar:na]
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72) ~[flyway-core-3.2.1.jar:na]
    at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:156) ~[flyway-core-3.2.1.jar:na]
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1059) ~[flyway-core-3.2.1.jar:na]
    at org.flywaydb.core.Flyway$1.execute(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na]
    at org.flywaydb.core.Flyway.execute(Flyway.java:1418) ~[flyway-core-3.2.1.jar:na]
    at org.flywaydb.core.Flyway.migrate(Flyway.java:1006) ~[flyway-core-3.2.1.jar:na]
    at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) ~[spring-boot-autoconfigure-1.4.1.RELEASE.jar:1.4.1.RELEASE]

我的应用程序开发属性如下所示:

flyway.enabled=true
flyway.url: jdbc:mysql://localhost:3306
flyway.user: usertest
flyway.password: testtest
flyway.schemas=testDB
flyway.baseline-on-migrate=true
flyway.locations:classpath:/db/migration/dev,/db/data

# Naming strategy
spring.jpa.hibernate.naming.strategy= org.hibernate.cfg.ImprovedNamingStrategy

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql = true
logging.level.org.hibernate.SQL=debug
spring.jpa.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

spring.jpa.generate-ddl = false
spring.jpa.hibernate.ddl-auto =none

共有1个答案

符正信
2023-03-14

该异常仅意味着在执行迁移时通过 flyway 标识的一组“新”迁移中,一个或多个脚本导致错误。

Flyway创建了一个表,它跟踪已执行的迁移脚本及其校验和,您可以验证该表,它应该在执行结果列中包含一个或多个“0”。

当您处于这种情况时(在本地到开发阶段),您仍然可以简单地删除迁移表中不成功的行,更正有罪的脚本,最后,再次启动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.

  • 我们在生产系统中使用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中)非法语法

  • Flyway是否可以用于混合创建和迁移脚本,以便: 新安装运行架构创建脚本 现有安装运行迁移脚本,并且永远看不到后续版本的创建脚本 ? 例如给定: 现有的V1安装将运行以下操作以访问V3: 数据库/迁移/V1/V1.1__migrateA.sql 数据库/迁移/V2/V2.1__migrateB.sql 数据库/迁移/V2/V2.2__migrateC.sql 它永远不会运行以下内容,因为它们表示

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

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

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