我们可以使用 flyway 在多个数据库上并行部署 sql 代码吗
Can we deploy sql code on Multiple database in parallel using flyway
我有包含多个数据库的服务器,现在我需要在所有数据库上并行部署代码,是否可以在 flyway 中实现这一点,因为对于每个数据库我都需要有单独的配置文件。所以我想知道如何以这种方式实现所有配置将并行触发。
此致,
阿达什
为什么每个数据库都需要一个单独的配置文件?您可以使用此处记录的各种 Flyway 命令开关覆盖 most/all 配置文件中的数据:
http://flywaydb.org/documentation/commandline/migrate.html
例如,您可以使用 -URL 开关覆盖配置文件中的 JDBC 连接字符串。这允许您只有一个配置文件,但 运行 针对不同的目标数据库进行升级。
通常最好使用这些开关,因为它可以避免代码重复。 (你不需要维护那么多配置文件。)这也意味着你可以避免将密码之类的东西放入你的源代码中。
下一步是创建一个脚本,运行s flyway 针对您的每个目标数据库进行迁移。例如,您可以编写一个执行类似以下操作的脚本:
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,您可能会发现此步骤模板很有用。此步骤模板还包括 "Drift-Check" 功能以确保您的数据库同步:
Flyway migrate step template for Octopus Deploy
如果您打算使用任何其他工具,您可能会发现此 PowerShell 脚本很有用(从上面的 link 复制),其中 $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的工具用户更有效地构建他们的项目。)
在 Flyway documentation 中它描述了一个开关,请指定一个不同的配置文件。这样你
"To use an alternative configuration file use -configFiles=path/to/myAlternativeConfig.conf"
这样您应该能够使用相同的 sql 文件夹并应用不同的配置设置。
我有包含多个数据库的服务器,现在我需要在所有数据库上并行部署代码,是否可以在 flyway 中实现这一点,因为对于每个数据库我都需要有单独的配置文件。所以我想知道如何以这种方式实现所有配置将并行触发。
此致, 阿达什
为什么每个数据库都需要一个单独的配置文件?您可以使用此处记录的各种 Flyway 命令开关覆盖 most/all 配置文件中的数据:
http://flywaydb.org/documentation/commandline/migrate.html
例如,您可以使用 -URL 开关覆盖配置文件中的 JDBC 连接字符串。这允许您只有一个配置文件,但 运行 针对不同的目标数据库进行升级。
通常最好使用这些开关,因为它可以避免代码重复。 (你不需要维护那么多配置文件。)这也意味着你可以避免将密码之类的东西放入你的源代码中。
下一步是创建一个脚本,运行s flyway 针对您的每个目标数据库进行迁移。例如,您可以编写一个执行类似以下操作的脚本:
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,您可能会发现此步骤模板很有用。此步骤模板还包括 "Drift-Check" 功能以确保您的数据库同步:
Flyway migrate step template for Octopus Deploy
如果您打算使用任何其他工具,您可能会发现此 PowerShell 脚本很有用(从上面的 link 复制),其中 $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的工具用户更有效地构建他们的项目。)
在 Flyway documentation 中它描述了一个开关,请指定一个不同的配置文件。这样你
"To use an alternative configuration file use -configFiles=path/to/myAlternativeConfig.conf"
这样您应该能够使用相同的 sql 文件夹并应用不同的配置设置。