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