文章目录

介绍
快速使用
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

Liquibase使用(转)的更多相关文章

  1. liquibase的使用

    前言 liquibase是一个数据库持续集成插件.独立于数据库存在,oracle,mysql,db2,h2,sql server,postgresql都能使用.它使用配置文件来更新数据库结构,并加入版 ...

  2. Spring3+Mybatis3+Mysql+ivy+liquibase

    Spring3+Mybatis3+Mysql+ivy+liquibase 集成 近一周时间所学技术:整合Spring+MyBatis+MySql+ivy+liquibase Mybatis:是一个基于 ...

  3. liquibase之快速入门

    第一步: 创建一个Changelog File: 这个database  Changelog file列举了数据库中所有的改变情况,该文件是以xml为基础的,下面是一个空的xml文件: <?xm ...

  4. Liquibase的简单使用

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

  5. [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習

    透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...

  6. flyway和liquibase的使用样例

    在代码上我们有svn和git等诸多的版本控制方法. 但是在数据库上却没有相应的工具.一度导致多环境见的数据库同步难以维持. flyway和liquibase都是常见的数据库版本控制工具. flyway ...

  7. [心得] 如何利用liquibase進行資料庫版本控制 - 基礎觀念

    前言 - 會寫這篇除了是要記錄一下使用的過程之外,也是發現到網路上找來的教學幾乎都是跟其它環境做結合 比較沒有單純利用command進行的流程.也沒有整體觀念的介紹,所以將我所理解的整理分享給大家. ...

  8. LiquiBase 学习

    preconditions mysql database is installed maven has been setted up properly add depedenceies apply p ...

  9. Liquibase使用入门

    1.LiquiBase简介 LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.LiquiBase的主 ...

  10. eclipse liquibase 插件

    http://marketplace.eclipse.org/category/free-tagging/liquibase http://marketplace.eclipse.org/market ...

随机推荐

  1. row_number()、rank()、dense_rank()排序方式的区别

    1.row_number() 排序策略,连续排序,它会为查询出来的每一行记录生成一个序号,依次排序且不会重复,例如1,2,3,4   SELECT names,dept,row_number() OV ...

  2. spring-boot 使用servlet2.5(四)

    环境 jdk 6 tomcat 6.0.53 sts 4.4.2 maven 3.2.5 背景 由于环境限制,还在使用 servlet 2.5,所以需要将 spring boot 进行配置,支持 se ...

  3. # [洛谷1337] 吊打XXX/平衡点 (模拟退火)

    [洛谷1337] 吊打XXX/平衡点 (模拟退火) 题意 n个重物(x,y,w),求平衡时x的位置(x,y) 分析 模拟退火基础题,基于随机数的优化算法,时间复杂度玄学,参数玄学,能不能AC看脸,当然 ...

  4. django 路由层 伪静态网页 虚拟环境 视图层

    路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页 虚拟环境 视图层 JsonResponse FBV与CBV 文件上传 项目urls.py下面 from app01 import ...

  5. Js 更换html同一父元素下子元素的位置

    //更换两个元素的位置 var exchange=function (el1, el2) { var ep1 = el1[0].parentNode, ep2 = el2[0].parentNode, ...

  6. [C#.net]C#如何解析json文本文件

    C#解析Json字符串,可以借助Newtonsoft.Json将Json字符串序列化为对象,再从对象中获取值 Newtonsoft.Json.JsonConvert.DeserializeObject ...

  7. 03 Go语言特性

    一.基本注意事项 1.转义字符 \t 一个制表符,代表一次tab \n 换行符 \\ 转义代表 \ \" 转义代表 " \r 一个回车,从当前行的最前面开始输出,会覆盖以前的内容, ...

  8. 阿里巴巴开源框架java诊断工具--Arthas

    下载:arthas wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar --target-i ...

  9. Spring讲解-----------表达式语言

    转自:https://blog.csdn.net/u011225629/article/details/47143083 5.1  概述5.1.1  概述       Spring表达式语言全称为“S ...

  10. ceres for Android 太慢的解决方法

    跨平台编译了ceres,结果在android平台上运行的太慢,优化一次要0.3秒左右,时不时要一两秒.这太扯了.没辙了,在google上瞎搜索,看到 Jacobian evaluation is ve ...