我计划通过grails数据库迁移插件使用LiquiBase。当我使用新版本的数据库架构启动包含两台服务器的集群时,并且两台服务器都尝试启动架构升级,会发生什么情况?
grails 数据库迁移插件或 LiquiBase 本身是否具有针对并发升级尝试的保护?
除了数据库表之外,Liquibase 还会创建一个databasechangelog
表和一个databasechangeloglock
表来管理其状态。 databasechangelog
包含有关已运行的迁移的信息,databasechangeloglock
用于防止并发尝试运行迁移。
当第一个集群实例启动时,它将通过在databasechangeloglock
表中插入一行来获取锁,并运行任何缺少的迁移。当第二个启动时,它将被阻止,直到锁被释放,然后它将获得一个锁,并且由于不会有任何未运行的迁移,它不会做任何事情。