【问题标题】:Can we deploy sql code on Multiple database in parallel using flyway我们可以使用flyway在多个数据库上并行部署sql代码吗
【发布时间】:2016-03-16 22:25:55
【问题描述】:

我有一个包含多个数据库的服务器,现在我需要在所有数据库上并行部署代码,是否有可能在 flyway 中实现这一点,因为对于每个数据库我需要有单独的配置文件。所以我想知道如何以这种方式实现所有配置将并行触发。

问候, 阿达什

【问题讨论】:

    标签: flyway


    【解决方案1】:

    为什么每个数据库都需要一个单独的配置文件?您可以使用此处记录的各种 Flyway 命令开关覆盖配置文件中的大部分/所有数据:

    http://flywaydb.org/documentation/commandline/migrate.html

    例如,您可以使用 -URL 开关覆盖配置文件中的 JDBC 连接字符串。这允许您拥有一个配置文件,但可以针对不同的目标数据库运行升级。

    通常最好使用这些开关,因为它可以避免代码重复。 (您不需要维护这么多配置文件。)这也意味着您可以避免将密码之类的东西放入源代码中。

    下一步是创建一个针对每个目标数据库运行 flyway migrate 的脚本。例如,您可以编写一个执行以下操作的脚本:

    flyway migrate -url:jdbc:mysql://<host>:<port>/<database1>
    flyway migrate -url:jdbc:mysql://<host>:<port>/<database2>
    flyway migrate -url:jdbc:mysql://<host>:<port>/<database3>
    flyway migrate -url:jdbc:mysql://<host>:<port>/<database4>
    

    现在,当您运行此脚本时,您的每个数据库都将按顺序更新。

    或者,如果您需要并行而不是按顺序运行更新,则需要找到一种方法来安排每条线路同时运行。实现此目的的一种方法是使用像 Octopus Deploy 这样的自动化工具来编排您的部署。

    如果您想使用 Octopus Deploy,您可能会发现此步骤模板很有用。此步骤模板还包括“漂移检查”功能,以确保您的数据库同步:

    Flyway migrate step template for Octopus Deploy

    如果您打算使用任何其他工具,您可能会发现此 PowerShell 脚本很有用(从上面的链接复制),其中 $locationsPath$targetUrl$targetUser$targetPassword 都是变量。

    # Executing deployment
    Write-Host "*******************************************"
    Write-Host "Executing deployment:"
    Write-Host " - - - - - - - - - - - - - - - - - - - - -"
        $arguments = @(
            "migrate"
            "-locations=filesystem:$locationsPath",
            "-url=$targetUrl",
            "-user=$targetUser",
            "-password=$targetPassword"
        )
    Write-Host "Executing the following command: & $flywayCmd $arguments"
    
    & $flywayCmd $arguments
    

    问候,亚历克斯

    (公开披露:我是 Redgate Software 的售前工程师。我编写了上面提到的步骤模板,并与一个团队合作构建了FlySQL,这是一个帮助 MySQL Flyway 用户更有效地构建项目的工具。 )

    【讨论】:

    • 嗨,Alex,感谢您提供 URL 切换的详细信息,这对我来说是一个不错的提示。但是我有这样的情况,对于每个数据库,代码都会有所不同,所以我的每个数据库的 SQL 文件夹路径将是一个单独的路径,它不会是常见的,在这种情况下我应该如何处理。我希望在这种情况下,至少我应该将数据库和文件夹路径文件分开配置文件。如果是这种情况,有没有办法处理多个配置文件。
    • 嗨 Adarsh,在这种情况下,我相信 -locations 开关会很有用。它允许您向一组 SQL 脚本添加特定的相对路径。您可以根据部署到的每个数据库调整此开关。一般来说,尽量减少针对特定环境的此类定制是一个明智的想法,因为它会使测试和维护变得痛苦。很容易低估这里所涉及的成本。
    • 谢谢 Alex,我想了解更多有关 Octopus Deploy 的信息,它是类似于 flyway 还是完全不同,我们是否有用于部署的命令行实用程序,以便 Jenkins 作业可以使用该命令行实用程序可用并触发部署。否则章鱼部署类似于詹金斯部署,因为当我检查它时,我发现它与 UI 部署有关,所以想要更多关于它的信息。你能分享一下它的一些细节吗
    • Octopus 是像 Jenkins 一样的自动化工具,而不是像 Flyway 这样的数据库部署工具。虽然 Jenkins 是构建/测试的理想选择,但 Octopus 是为部署而设计的。实际上,它是一个分布式 PowerShell 调度工具,原生支持在 MS 堆栈上部署 Web 应用程序等(他们正在添加 Linux 支持)。我的步骤模板扩展了 Octopus 以调用 Flyway 来部署您的数据库。您需要将 Flyway 项目打包到 NuGet 包中。通常这是由 Jenkins 等处理的事情。更多信息:octopus.com
    • 感谢您提供详细信息
    【解决方案2】:

    Flyway documentation 中,它描述了一个开关确实指定了一个不同的配置文件。这样你

    “要使用替代配置文件,请使用 -configFiles=path/to/myAlternativeConfig.conf”

    这样您应该能够使用相同的 sql 文件夹,但应用不同的配置设置。

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多