如何配置Liquibase实现控制表与业务迁移分属不同MySQL schema
结论
这个需求完全可以实现,你遇到的问题是Liquibase 4.5.x版本的配置前缀优先级冲突导致的,按以下步骤调整即可:
第一步:修改JDBC连接URL
移除URL末尾的默认业务schema配置,仅保留MySQL实例连接地址,避免URL自带的schema覆盖参数配置:
liquibase.command.url: jdbc:mysql://host.docker.internal:3306/第二步:调整Liquibase配置项
不要混用
liquibase.command前缀的配置和全局配置,直接使用全局schema配置项即可:# 控制表存放的专属schema liquibase.liquibaseSchemaName=<control_schema> # 迁移脚本默认应用的业务schema liquibase.defaultSchemaName=<default_schema>注意:你使用的数据库账号需要同时拥有这两个schema的对应权限:控制schema需要建表、写表权限,业务schema需要你的迁移操作涉及的所有权限
第三步:可选兜底配置
如果调整配置后仍未生效,可以直接在Docker执行命令中追加高优先级参数,覆盖配置文件逻辑,你编排脚本的Docker运行部分调整为:
docker run --rm \ -e INSTALL_MYSQL=true \ -v "$MASTER_CHANGELOG_DIR":/liquibase/changelog \ -v "$CONF_DIR":/conf \ -v "$MIGRATIONS_DIR":/liquibase/changelog/migrations \ liquibase/liquibase \ --defaultsFile=/conf/liquibase."$ZONE".properties \ --liquibaseSchemaName=<control_schema> \ --defaultSchemaName=<default_schema> \ "$COMMANDS"验证方法
调整完成后执行
liquibase update-sql命令查看生成的SQL语句:正常情况下输出的SQL中,
DATABASECHANGELOG、DATABASECHANGELOGLOCK两张控制表的操作都会带<control_schema>前缀,而你的迁移业务表操作都会默认带<default_schema>前缀,不需要修改现有迁移脚本。
内容的提问来源于stack exchange,提问作者Vítor Brito
相关产品推荐
相关产品推荐

