首页 > 解决方案 > 如何修复未清除的 Liquibase 数据库锁

问题描述

我在项目中使用 liquibase,到目前为止它运行良好。
我添加了一个新的变更集,它在本地运行良好,一旦部署,容器的状态就会挂起以下语句: “liquibase: Waiting for changelog lock...”

未设置部署的限制资源。
表“databasechangeloglock”的更新不起作用,导致 pod 一直锁定它。
我该如何解决这个问题?

标签: kubernetesliquibasekubernetes-pod

解决方案


在此处查看其他问题。如果锁发生并且进程意外退出,那么锁将保留在那里。

根据this answer,您可以通过直接运行SQL来解除锁定:

UPDATE DATABASECHANGELOGLOCK SET LOCKED=0, LOCKGRANTED=null, LOCKEDBY=null where ID=1;

注意:根据您的数据库引擎,您可能需要使用 FALSE 或 'f' 而不是0LOCKED

根据您的问题,您的进程本身正在创建一个新锁并且每次仍然失败,那么很可能是由于不同原因退出/失败的进程(或以错误的顺序检查锁。

另一种选择是考虑Liquibase No ChangeLog Lock 扩展

注意:这可能是最后的手段。如果您在更改日志锁定方面遇到的麻烦多于获得任何好处(例如,仅运行应用程序的一个实例并且实际上不需要锁定),则扩展可能是一种选择。它可能不是“最佳”解决方案,但根据您的需要肯定是一种选择。链接中的自述文件也说明了这一点。


推荐阅读