zoukankan      html  css  js  c++  java
  • Liquibase使用(转)

    文章目录

    介绍
    快速使用
    Springboot中
    引入依赖
    配置日志文件ChangeLog
    编写变更记录ChangeSet
    Maven中
    引入依赖
    配置liquibase.properties
    编写变更记录ChangeSet
    版本回滚
    回滚指定次数
    回滚到指定tag
    输出回滚语句
    输出变更记录
    一些规范
    参考资料
    介绍

    Liquibase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行schema类型的文件来达到迁移。其有点主要有以下:

    支持几乎所有主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
    支持多开发者的协作维护;
    日志文件支持多种格式,如XML, YAML, JSON, SQL等;
    支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等。
    快速使用

    Springboot中

    引入依赖

    <dependencies>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
        </dependency>
        <dependency>
    </dependencies>

    配置日志文件ChangeLog

    1. resources目录中创建/db/changelog目录作为日志文件存放目录
    2. 在目录中创建日志文件db.changelog-master.yml
    3. application.yml中配置changelog路径
    spring:
      liquibase: 
        # 不配置默认会查找'classpath:/db/changelog/db.changelog-master.yaml'文件
        change-log: 'classpath:/db/changelog/db.changelog-master.yml'

    编写变更记录ChangeSet

    1. 编写初始数据库脚本
    databaseChangeLog:
      - changeSet:
          # 唯一id,建议使用Flayway的命名格式'V<version>[_<SEQ>][__description]'
          id: V1.0_0__init
          # 作者
          author: Cheivin
          # 描述
          comment: "初始化脚本内容,加载初始数据"
          # 启用事物
          runInTransaction: true
          # 变更脚本
          changes:
            # 创建表格
            - createTable:
                tableName: user
                columns:
                  - column:
                      name: id
                      type: int
                      autoIncrement: true
                      constraints:
                        primaryKey: true
                        nullable: false
                      remarks:
                  - column:
                      name: username
                      type: VARCHAR(50)
                      constraints:
                        nullable: false
                  - column:
                      name: password
                      type: VARCHAR(50)
                      constraints:
                        nullable: false
            # 加载数据
            - loadData:
                tableName: user
                columns:
                  - column:
                      header: username
                      name: username
                  - column:
                      header: password
                      name: password
                encoding: UTF-8
                file: db/data/init-data.csv
            # 标记,用于回滚时指定版本
            - tagDatabase:
                tag: V1.0_0__init
    1. 运行项目后,查看数据库
    2. 修改changelog,增加变更数据库脚本
    # 在databaseChangeLog后追加
      - changeSet:
          id: V1.0_1__mod
          author: Cheivin
          comment: "修改用户表,增加账单表"
          runInTransaction: true
          changes:
            # 通过标准格式添加字段
            - addColumn:
                # 目标表
                tableName: user
                columns:
                  - column:
                      name: state
                      type: tinyint
                      # 默认值
                      defaultValueNumeric: 0
                      remarks: '用户状态,0:未激活,1:激活,-1:禁用'
                  - column:
                      name: identity
                      type: int
                      # 默认值
                      defaultValueNumeric: 999
                      remarks: '用户身份,999:管理员'
            # 通过sql语句操作数据库
            - sql:
                sql: insert into user (username,password,state,identity) values ('admin','admin',1,999)
            # 通过sql文件操作数据库
            - sqlFile:
                encoding: utf8
                path: db/changelog/V1.0_1__mod_bill.sql
            - tagDatabase:
                tag: V1.0_1__mod
            # 回滚语句
            - rollback:
                - delete:
                    tableName: user
                    where: username='admin'
                - dropTable:
                    tableName: user_bill

    Maven中

    引入依赖

    <build>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.6.3</version>
                <configuration>
                  <!-- 配置文件,必须放在resource目录下 -->
                  <propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile>
                </configuration>
                <executions>
                    <!-- 默认mvn启动时执行更新操作 -->
                    <execution>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>update</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    配置liquibase.properties

    # 日志文件路径,必须放在resource目录下
    changeLogFile=src/main/resources/liquibase/db.changelog-master.yml
    # 数据库地址
    url=jdbc:mysql://localhost:3306/liquibase_mvn?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    # 账号
    username=root
    # 密码
    password=root

    编写变更记录ChangeSet

    1. 编写初始数据库脚本
    databaseChangeLog:
      - changeSet:
          # 唯一id,建议使用Flayway的命名格式'V<version>[_<SEQ>][__description]'
          id: V1.0_0__init
          # 作者
          author: Cheivin
          # 描述
          comment: "初始化脚本内容,加载初始数据"
          # 启用事物
          runInTransaction: true
          # 变更脚本
          changes:
            # 创建表格
            - createTable:
                tableName: user
                remarks: '用户表'
                columns:
                  - column:
                      name: id
                      type: int
                      autoIncrement: true
                      constraints:
                        primaryKey: true
                        nullable: false
                  - column:
                      name: username
                      type: VARCHAR(50)
                      constraints:
                        nullable: false
                      remarks: '用户名'
                  - column:
                      name: password
                      type: VARCHAR(50)
                      constraints:
                        nullable: false
                      remarks: '密码'
            # 加载数据
            - loadData:
                tableName: user
                columns:
                  - column:
                      header: username
                      name: username
                  - column:
                      header: password
                      name: password
                encoding: UTF-8
                file: src/main/resources/liquibase/data/init-data.csv
            # 标记,用于回滚时指定版本
            - tagDatabase:
                tag: V1.0_0__init
    1. 运行项目后,查看数据库
    2. 修改changelog,增加变更数据库脚本
    # 在databaseChangeLog后追加
      - changeSet:
          id: V1.0_1__mod
          author: Cheivin
          comment: "修改用户表,增加账单表"
          runInTransaction: true
          changes:
            # 通过标准格式添加字段
            - addColumn:
                # 目标表
                tableName: user
                columns:
                  - column:
                      name: state
                      type: tinyint
                      # 默认值
                      defaultValueNumeric: 0
                      remarks: '用户状态,0:未激活,1:激活,-1:禁用'
                  - column:
                      name: identity
                      type: int
                      # 默认值
                      defaultValueNumeric: 999
                      remarks: '用户身份,999:管理员'
            # 通过sql语句操作数据库
            - sql:
                sql: insert into user (username,password,state,identity) values ('admin','admin',1,999)
            # 通过sql文件操作数据库
            - sqlFile:
                encoding: utf8
                path: src/main/resources/liquibase/V1.0_1__mod_bill.sql
            - tagDatabase:
                tag: V1.0_1__mod
            # 回滚语句
            - rollback:
                - delete:
                    tableName: user
                    where: username='admin'
                - dropTable:
                    tableName: user_bill

    版本回滚

    回滚指定次数

    命令格式

    mvn liquibase:rollback -Dliquibase.rollbackCount=次数

    eg:

    mvn liquibase:rollback -Dliquibase.rollbackCount=1

    回滚到指定tag

    命令格式

    mvn liquibase:rollback -Dliquibase.rollbackTag=tag名称

    eg:

    mvn liquibase:rollback -Dliquibase.rollbackTag=V1.0_0__init

    输出回滚语句

    命令格式

    mvn liquibase:rollbackSQL -Dliquibase.rollbackCount=次数

    mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=tag名称


    将会在target/liquibase目录中生成migrate.sql文件

    输出变更记录

    命令格式

    mvn liquibase:dbDoc

    将会在target/liquibase目录中生成dbDoc目录,打开index.html可查看

    一些规范

    ChangeSet id建议使用Flayway的命名格式V<version>[_<SEQ>][__description],如V1.0_0__init。或使用[任务ID]-[日期]-[序号],如T100-20190705-001
    ChangeSet必须填写author
    Liquibase禁止对业务数据进行sql操作
    所有表,列要加remarks进行注释
    已经执行过的ChangeSet严禁修改。
    不要随便升级项目liquibase版本,特别是大版本升级。不同版本ChangeSet MD5SUM的算法不一样。
    参考资料

    官方文档 http://www.liquibase.org/documentation/
    changeset配置文档 http://www.liquibase.org/documentation/changes/index.html
    ————————————————
    版权声明:本文为CSDN博主「Cheivin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zhao0416/article/details/94733610


    ————————————————
    版权声明:本文为CSDN博主「Cheivin」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/zhao0416/article/details/94733610

  • 相关阅读:
    分享个好的笔记软件:为知笔记
    Mysql的一些常用方法
    从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布
    【超级详细】使用 PXE+Kickstart 实现无人值守批量部署系统
    Linux杀不死的进程之CPU使用率700%
    Hadoop 从节点的 NodeManager 无法启动
    Phoenix 无法启动报错: java.net.BindException: Address already in use
    CentOS7 配置 SSH监听多个端口方法
    Linux CentOS 防止SSH暴力破解
    Windows出现“引用账户被锁定,且暂时无法登录”解决方法
  • 原文地址:https://www.cnblogs.com/muxi0407/p/11742046.html
Copyright © 2011-2022 走看看