升级到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严格模式吗?
谢谢!
答案 0 :(得分:0)
PXC中的显式锁定不会分发到整个群集。这可能导致未知/不良后果。因此,在更现代的PXC版本中,pxc_strict_mode
被引入以帮助防止无意的副作用发生。
如果您的应用程序仅将写入隔离到1个节点,则可以将设置更改为MASTER
,除了表锁定检查之外,该行为保持最强制行为。
它也是一个会话级变量,因此仅为此操作更改它不会影响其他会话。
另一方面,如果它在4.0中工作并且在4.1中不起作用并且在数据库方面没有任何变化,那么这就是与Flyway开发人员一起提出的问题。这显然是他们添加的功能/功能,它应该有一个禁用选项。