mysql - 飞路假故障

标签 mysql jenkins ansible database-migration flyway

前几天,我们的 jenkins 工作失败了,我们的 flyway 迁移又回来了。当我们查看数据库时,我们发现脚本已被应用,但没有在脚本的“schema_version”表中创建条目。我们知道这个脚本需要很长时间才能应用(修改一个大约有 7000 万行的表)并且我们使用了至少可以使更改成为非阻塞的 SQL 语法(在 mysql 上为 ALGORITHM=INPLACE)。然而,当脚本完成时,flyway 返回到 jenkins 失败,并且在这个漫长的脚本之后没有运行任何脚本。

我们通过 gradle 插件(版本 3.2.1)运行 flyway,并使用 ansible 调用 gradle 任务。 Jenkins 调用 ansible,调用 gradle,调用 flyway。不确定这是由 flyway 超时还是 ansible 引起的。不过,我们不希望在生产中再次发生这种情况。

我们的解决方法是手动将条目放入 schema_version 中,这样脚本就不会重新运行,然后重新应用迁移,以便运行之后的脚本。

我们查看了数据库,大约在同一时间出现了巧合的连接峰值,所以它可能遇到了连接限制,但我认为如果它正在运行脚本,连接就已经打开了。

jenkins 的净化输出如下:

TASK: [flyway | run flywayMigrate] ******************************************** 
<db.server> REMOTE_MODULE command gradle -b /opt/product/rc/flyway-17.5.32.37534.d2bac4a/extracted/flyway.gradle flywayMigrate
failed: [db.server] => {"failed": true, "parsed": false}
invalid output was: SUDO-SUCCESS-plqsdlxwlfkdsujlxdafldpasvtllis

最佳答案

这很可能是由于 Flyway 用于元数据表的连接被基础设施的某些部分(数据库、代理等)关闭,导致 Flyway 在长时间后无法将行写入表-运行迁移完成。

关于mysql - 飞路假故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36921219/

相关文章:

mysql - 复合键的自动递增部分

git - Jenkins 构建 CloudFormation Stack,然后通过 CodeDeploy 插件部署代码

jenkins - PsExec 未被识别为内部或外部命令

mysql - 不同表上的外键

尽管有 LIMIT,MySQL 使用自定义函数的查询非常慢

ansible - 在 Ansible 中访问嵌套变量

ios - ansible - 思科 IOS 和 "reload"命令

python-3.x - 如何使用 Ansible 安装 python3.4.3

php - MySQL 连接两个表的多条记录

java - 构建快照时不会触发 Jenkins 多分支项目