Mysql 飞道假故障

Mysql 飞道假故障,mysql,jenkins,ansible,database-migration,flyway,Mysql,Jenkins,Ansible,Database Migration,Flyway,前几天,我们在詹金斯的工作中失败了。当我们查看数据库时,发现脚本已应用,但在脚本的“schema_version”表中没有创建任何条目。我们知道应用这个脚本花了很长时间(修改了一个大约7000万行的表),我们使用了SQL语法,使得更改至少是非阻塞的(mysql上的ALGORITHM=INPLACE)。然而,当脚本完成时,flyway返回给jenkins失败,并且在这个长脚本之后没有运行任何脚本 我们通过gradle插件(3.2.1版)运行flyway,并使用ansible调用gradle任务。詹

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

我们通过gradle插件(3.2.1版)运行flyway,并使用ansible调用gradle任务。詹金斯称ansible为gradle,称flyway为flyway。不确定这是否是由于飞道超时或ansible造成的。但我们不希望这种情况在生产中再次发生

我们的解决方法是手动将条目放入schema_版本,这样脚本就不会重新运行,然后重新应用迁移,这样脚本就可以运行了

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

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
TASK:[flyway |运行flywayMigrate]*********************************************************************************************************************
远程模块命令gradle-b/opt/product/rc/flyway-17.5.32.37534.d2bac4a/extracted/flyway.gradle flywayMigrate
失败:[db.server]=>{“失败”:true,“已解析”:false}
无效输出为:SUDO SUCCESS plqsdlxwlfkdsujlxdaldpasvtllis

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

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

MySQL是否在启用某种日志记录的情况下运行?最有可能的类型是用于复制/增量备份的binlog。如果是,请检查MySQL日志(例如,对于binlog,请使用
mysqlbinlog
实用程序转储它),并尝试了解MySQL当时在做什么。请注意,binlog将只记录实际修改了某些内容的更新,因此这不会提供完整的信息,但可能会提供一些线索。感谢您的提示。因为这只发生在我们的生产服务器上,所以我实际上无法访问它(为了安全起见被锁定)。脚本在我有权访问的我们的CERT环境中成功了,所以这不好。我可能可以让某人登录到生产,但这是令人惊讶的挑战哈哈。MySQL运行时启用了某种日志记录吗?最有可能的类型是用于复制/增量备份的binlog。如果是,请检查MySQL日志(例如,对于binlog,请使用
mysqlbinlog
实用程序转储它),并尝试了解MySQL当时在做什么。请注意,binlog将只记录实际修改了某些内容的更新,因此这不会提供完整的信息,但可能会提供一些线索。感谢您的提示。因为这只发生在我们的生产服务器上,所以我实际上无法访问它(为了安全起见被锁定)。脚本在我有权访问的我们的CERT环境中成功了,所以这不好。我可能可以让某人登录到生产,但这是令人惊讶的挑战哈哈。