0

升级到 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 严格模式?

谢谢!

4

1 回答 1

0

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

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

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

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

于 2018-04-17T18:17:40.003 回答