Liquibase 您所在的位置:网站首页 sql脚本文件生成数据库 Liquibase

Liquibase

2023-05-30 01:21| 来源: 网络整理| 查看: 265

简介

Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。

Liquibase使参与应用程序发布过程的任何人都可以轻松地: 不依赖于特定的数据库,Liquibase会自动适配目标数据库进行脚本初始化,目前支持至少30种主流数据库。 提供数据库比较功能,比较结果保存在XML中,基于该XML可以用Liquibase轻松部署或升级数据库。 以XML记录/存储数据库变化,其中以author和id唯一标识一个变化(ChangSet),支持数据库变化的合并,因此支持多开发人员同时工作。 在数据库中保存数据库修改历史(DatabaseChangeHistory),在数据库升级时自动跳过已应用的变化(ChangSet)。 提供变化应用的回滚功能,可按时间、数量或标签(tag)回滚已应用的变化。通过这种方式,开发人员可轻易的还原数据库在任何时间点的状态。 可生成数据库修改文档(HTML格式) 将所有变化(包括结构和数据)存在XML文件中,便于版本控制的工具 支持Springboot,只需要导入依赖。 application.yml配置(可选) 不配置,默认去resource下/db/changelog下找db.changelog-mastert.yaml文件 Quick Start step1:通过PowerDesigner等数据库建模工具生成数据库建表语句 step2:通过命令行对数据库生成(全量)变更集(change set) step3:通过命令行对数据库生成(增量)变更集(change set) step4:校验数据库中的变更 图一 SpringBoot 、Maven 集成 添加maven依赖 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE 4.8.0 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 8.0.13 org.liquibase liquibase-core ${liquibase.version} org.springframework.boot spring-boot-maven-plugin true org.liquibase liquibase-maven-plugin ${liquibase.version} src/main/resources/liquibase.properties ${basedir}/src/main/resources/config/liquibase/changelog/${project.version}_changelog.xml ${basedir}/src/main/resources/config/liquibase/changelog/generate_changelog.xml false UTF-8 process-resources diff application.properties spring.datasource.username=root spring.datasource.password=123456 spring.datasource.url=jdbc:mysql://localhost:3306/world1?serverTimezone=UTC spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 是否启用 spring.liquibase.enabled=true # 指定配置文件路径 spring.liquibase.change-log=classpath:/config/liquibase/master.xml liquibase.properties changeLogFile=src/main/resources/config/liquibase/changelog/0.0.1-SNAPSHOT_changelog.xml zone=UTC verbose=true # 覆盖本地 ddl dml dropFirst=false #目标数据库 driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/world1?serverTimezone=UTC username=root password=123456 #引用数据库 referenceDriver=com.mysql.cj.jdbc.Driver referenceUrl=jdbc:mysql://localhost:3306/world?serverTimezone=UTC referenceUsername=root referencePassword=123456 添加/生成 liquibase xml

master.xml

liquibase 配置文件入口,主要用来引用其他的changelog.xml,如下配置文件中的include,当然也可以使用includeAll来引用整个目录

generate_changelog.xml

使用mvn 插件逆向生成xml,主要记录了ddl的变化信息,比如 如下配置文件中需要创建的表

图二 启动测试 图三 测试changeset版本控制

我们在spms_tenant_user_attr_config表中修改一个type字段的长度,便直接在之前的changeset中修改了字段,如下图所示,然后启动项目看结果

图四

报错信息是我们直接修改了changeset后导致md5值与之前的不匹配(直接在之前的changeset中做了修改)

答疑 问:liquibase如何判断 是同一changeset的? 答:author和id唯一标识一个变化(ChangSet) 问: liquibase是如何进行changeset版本控制的? 答:Liquibase会对已经执行的changelog的每一个changeSet的内容进行md5计算,生成的值是databasechanglog表的MD5SUM字段。 当重新启动Liquibase时,会对每个changeSet进行md5值计算,与databasechanglog表中的MD5SUM字段进行对比,如果不一致,说明changeSet值已经被修改,无法启动成功。 plugin-比较数据库差异

首先使用liquibase diff 功能前,我们在liquibase.properties中加入参考的数据库 world配置信息,用于差异比较的数据库,以此数据库为准,生成diff xml;然后再用liquibase插件看下生成的 diff xml信息;执行完毕后,查看diff xml 内容如下:

图五

plugin-生成增量的changelog SQL

读取diff生成的差异changeset,输出增加更新的SQL文件

图六 图七

总结 首次使用liquibase,可以直接根据数据库逆向生成changeSet xml 增量使用liquibase,使用diff命令生成需要增量更新的changeSet xml(也可用 updateSQL 生成可执行的SQL语句)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有