【问题标题】:Integrating Flyway into an existing database将 Flyway 集成到现有数据库中
【发布时间】:2020-11-25 08:11:17
【问题描述】:

我们从项目开始就没有使用 Flyway。我们处于先进的发展状态。专家评审建议在我们的项目中使用 Flyway。

问题是我们也将部分服务(微服务)转移到了另一个测试环境中。

正确实施 Flyway 的最佳方法是什么?要求是:

  1. 在开发环境中,无需更改已经存在的模式。但是所有新脚本都应该使用 Flyway 完成。

  2. 在测试环境中,无需更改已经存在的架构。但是,当我们将项目从 Dev 迁移到测试时,应该使用 Flyway 自动创建测试环境中不可用的内容。

  3. 当我们迁移到一个全新的环境(UAT、生产等)时,应该使用 Flyway 自动创建整个架构。

从文档中,我的理解是:

  1. 将开发模式(DDL 和 DML)备份为 SQL 脚本文件,提供类似 V1_0_1__initial.sql 的文件名。
  2. 使用“flyway clean”清理开发数据库。
  3. 基准开发数据库“flyway baseline -baselineversion=1.0.0”
  4. 现在,执行“flyway migrate”,这将应用 SQL 脚本文件 V1_0_1__initial.sql。
  5. 任何新脚本都应该使用更高的版本号编写(例如 V2_0_1__account_table.sql)

这是正确的方法还是有更好的方法?

问题是我有一个测试数据库,其中我们有不同的数据集(开发和测试中的数据不同,我想在两种环境中保持数据不变)。如果是这样,当我们从Dev环境中取出并在每个环境中分别应用它们时,将DDL和DML分开在不同的脚本文件中是否很好?可根据需要手动添加DML;但如果我做对了就有点困惑。

提前致谢。

【问题讨论】:

    标签: flyway


    【解决方案1】:

    所以,这里实际上有两个问题。数据管理和 Flyway 管理。

    在数据管理方面,是的,这应该是另一回事。数据不断增长。试图从源代码控制中管理数据,而不是简单的查找表,很快就会变得非常成问题。更不用说你在不同的环境中想要不同的数据。这也使自动化部署变得更加困难(如果您坚持走这条路线,分支将是您的朋友,每个数据集一个分支,然后适当地部署)。

    您可以在现有项目上实施 Flyway,是的。关键是建立基线。您不必执行上面列出的所有步骤。假设您有一个现有的数据库。您必须获取定义该数据库的脚本。该单个脚本应包括所有适当的 DDL(如果需要,还包括 DML)。按照 Flyway 标准命名。类似 V1.0__Baseline.sql。

    有了这些,你所要做的就是运行:

    flyway baseline
    

    这将建立您现有的代码库作为起点。从那里,您只需按照命名标准创建脚本:V1.1xxx V2.0xxx V53000.1xxx。并运行

    flyway migrate
    

    部署适当的更改。

    唯一需要注意的是,正如文档所述,您必须确保您的所有数据库都与您正在创建并标记为基线的 V1.0 相匹配。当您引入新的更改并将它们迁移到位时,任何偏差都会导致错误。只要你有匹配的基线点,你应该能够在不同的环境中继续处理不同的数据而没有问题。

    【讨论】:

    • 感谢格兰特的回答。我对一件事感到困惑:当我迁移到一个新的空数据库时,为什么我必须基线? Flyway 可以从头开始(可能版本零作为默认基线)。对于现有的数据库,我理解这一点。收到您的回复后,我会接受。
    • 如果您要使用全新的数据库,则不需要基线。 “迁移”命令将部署您拥有的数据库。您在空白数据库中的基线就是数据库。哎呀,我使用了 Flyway 部署,其中第一个脚本 V1 是脚本中的 CREATE DATABASE 命令。所以你真的不需要在空白数据库中设置基线。
    • 感谢格兰特!明白了?
    • 创建基线涉及两件事。首先,您要在现有数据库中开始工作,因此您需要建立该起点。其次,您必须在带外、手动脚本或其他方面进行调整,作为一种重置方式,您可以再次使用 Flyway 继续前进,您需要建立一个新的基线。希望对您有所帮助。
    • 没问题。很抱歉我没有投票赞成这个问题。解决了这个问题。
    猜你喜欢
    • 2021-11-11
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2018-07-10
    • 2017-04-09
    • 1970-01-01
    • 2018-11-27
    相关资源
    最近更新 更多