代码之家  ›  专栏  ›  技术社区  ›  Chloe

如何让FlyWay运行迁移?“架构是最新的。无需迁移。”

  •  8
  • Chloe  · 技术社区  · 6 年前

    我有一个现有的数据库。我创建了两个迁移

    $ ls src/main/resources/db/migration/
    V1__create_stats.sql  V2__create_sources.sql
    

    我在 application.properties

    # Prevent complaints when starting migrations with existing tables.
    flyway.baselineOnMigrate = true
    

    否则会出现错误 org.flywaydb.core.api.FlywayException: Found non-empty schema galaxybadge公司 without metadata table! Use baseline() or set baselineOnMigrate to true to initialize the metadata table.

    当我尝试启动应用程序时,它会跳过迁移而不执行迁移!我使用 show tables; 在MySQL中,看到它们不存在!

    >mvn spring-boot:run
    ...
    2018-05-09 18:43:03.671  INFO 24520 --- [  restartedMain] o.f.core.internal.util.VersionPrinter    : Flyway 3.2.1 by Boxfuse
    2018-05-09 18:43:04.420  INFO 24520 --- [  restartedMain] o.f.c.i.dbsupport.DbSupportFactory       : Database: jdbc:mysql://localhost:3306/galaxybadge (MySQL 5.5)
    2018-05-09 18:43:04.486  INFO 24520 --- [  restartedMain] o.f.core.internal.command.DbValidate     : Validated 0 migrations (execution time 00:00.030s)
    2018-05-09 18:43:04.704  INFO 24520 --- [  restartedMain] o.f.c.i.metadatatable.MetaDataTableImpl  : Creating Metadata table: `galaxybadge`.`schema_version`
    2018-05-09 18:43:05.116  INFO 24520 --- [  restartedMain] o.f.core.internal.command.DbBaseline     : Schema baselined with version: 1
    2018-05-09 18:43:05.145  INFO 24520 --- [  restartedMain] o.f.core.internal.command.DbMigrate      : Current version of schema `galaxybadge`: 1
    2018-05-09 18:43:05.146  INFO 24520 --- [  restartedMain] o.f.core.internal.command.DbMigrate      : Schema `galaxybadge` is up to date. No migration necessary.
    

    我看着 this answer 但这没有帮助,似乎给了错误的物业名称。这是 schema_version 它创建的表。

    > select * from schema_version;
    +--------------+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
    | version_rank | installed_rank | version | description           | type     | script                | checksum | installed_by | installed_on        | execution_time | success |
    +--------------+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
    |            1 |              1 | 1       | << Flyway Baseline >> | BASELINE | << Flyway Baseline >> |     NULL | root         | 2018-05-09 18:43:05 |              0 |       1 |
    +--------------+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
    

    弹簧防尘套1.5.6,FlyWay Core 3.2.1

    Spring docs - FlyWay docs

    2 回复  |  直到 6 年前
        1
  •  2
  •   Chloe    6 年前

    好的我找到了这个 https://flywaydb.org/documentation/existing

    但没有遵循它。相反,我将迁移从 V1__* V2__* V2... V3... 并将生产架构下载到 V1__initialize.sql

    mysqldump -h project.us-east-1.rds.amazonaws.com -u username -p --no-data --skip-add-drop-table --compact --skip-set-charset databasename > V1__initialize.sql
    

    然后当我跑春天的时候 mvn spring-boot:run 它运行了迁移。

    (实际上,对SQL进行了大量调试,我不得不多次删除表并从中删除行。) schema_verion 并从中删除旧文件名 target/.../migration/ 但这是另一个故事。)

    我相信有可能

    flyway.baselineVersion=0
    

    并根据此处的信息跳过SQL转储(初始化): https://flywaydb.org/documentation/configfiles 然而,让模式可用于未来的开发人员似乎是正确的方法。

    我还是不明白为什么它没有运行 V2__... 从原始问题迁移。如果从1开始,那么迁移2仍然可以运行。如果它像预期的那样工作,那么我可能会更快地理解这个问题。

        2
  •  2
  •   Victor Petit    6 年前

    对于已有数据库的Spring boot应用程序,请在 application.yml :

    flyway:
        baseline-on-migrate: true
        baseline-version: 0
    

    然后在1开始迁移脚本,如下所示: V1__script_description.sql ,则, V2__script_description.sql 。。。