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

时间:2017-07-26 15:59:25

标签: locking cluster-computing flyway percona percona-xtradb-cluster

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

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