Flyway执行含创建触发器的数据库迁移时停滞问题排查
根本原因分析
核心原因是MySQL 8.0的元数据锁(MDL)机制变化与Flyway 6.2.3版本的兼容性问题,具体细节如下:
- MySQL 8.0对元数据锁的持有逻辑做了调整:创建触发器时,会对关联的基表(此处为
billing表)持有更持久、更严格的MDL锁;而MySQL 5.7的MDL锁机制相对宽松,相同场景下不会触发阻塞。 - Flyway 6.2.3未适配MySQL 8.0的MDL锁变化:该版本的Flyway在执行迁移脚本时,事务处理和连接管理逻辑与MySQL 8.0的锁机制冲突,导致创建触发器后MDL锁无法正常释放,主线程卡在连接锁获取环节,迁移流程停滞。
- 移除触发器后恢复正常的原因:不再触发MySQL 8.0特有的MDL锁持有逻辑,Flyway的常规表创建操作不会触发锁阻塞,因此迁移可顺利完成。
补充说明:Flyway 6.x属于较旧版本,后续7.x及以上版本已修复了与MySQL 8.0的兼容性问题,包括元数据锁相关的处理逻辑。
内容的提问来源于stack exchange,提问作者jodoro
相关产品推荐
相关产品推荐

