Flyway 4.1, 4.2 与 Percona 的 PXC 严格模式不兼容



升级到Flyway 4.2.1后,我们在发布到Percona MySQL集群期间开始出现错误。我们得到的错误是:

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.dbsupport.FlywaySqlException: 
Unable to acquire MySQL named lock: Flyway-605484229
----------------------------------------------------
SQL State  : HY000
Error Code : 1105
Message    : Percona-XtraDB-Cluster prohibits use of GET_LOCK with pxc_strict_mode = ENFORCING

看起来 Flyway 4.1+ 试图锁定表格,而 Percona 的 PXC 严格模式不允许这样做。

我相信我的问题是:我们可以在 Flyway 4.1+ 方面做一些事情来避免此错误(之前在 Flyway 4.0 中一切正常(,或者我们唯一的选择是在 Percona 中禁用 PXC 严格模式?

谢谢!

PXC 中的显式锁不会分发到整个集群。这可能会导致未知/不良后果。因此,在更现代的PXC版本中,引入了pxc_strict_mode以帮助防止意外副作用的发生。

如果应用程序仅将写入隔离到 1 个节点,则可以将设置更改为MASTER以保留除表锁定检查之外的大多数强制行为。

它也是一个会话级变量,因此仅为此操作更改它不会影响其他会话。

另一方面,如果它在 4.0 中工作而在 4.1 中不起作用,并且在 DB 方面没有任何变化,那么向 Flyway 开发人员提出这是一个问题。这显然是他们添加的特性/功能,它应该带有禁用选项。

最新更新