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
- 在
resources目录中创建/db/changelog目录作为日志文件存放目录 - 在目录中创建日志文件
db.changelog-master.yml - 在
application.yml中配置changelog路径
spring:
liquibase:
# 不配置默认会查找'classpath:/db/changelog/db.changelog-master.yaml'文件
change-log: 'classpath:/db/changelog/db.changelog-master.yml'
编写变更记录ChangeSet
- 编写初始数据库脚本
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
- 运行项目后,查看数据库
- 修改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
- 编写初始数据库脚本
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
- 运行项目后,查看数据库
- 修改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使用(转)的更多相关文章
- liquibase的使用
前言 liquibase是一个数据库持续集成插件.独立于数据库存在,oracle,mysql,db2,h2,sql server,postgresql都能使用.它使用配置文件来更新数据库结构,并加入版 ...
- Spring3+Mybatis3+Mysql+ivy+liquibase
Spring3+Mybatis3+Mysql+ivy+liquibase 集成 近一周时间所学技术:整合Spring+MyBatis+MySql+ivy+liquibase Mybatis:是一个基于 ...
- liquibase之快速入门
第一步: 创建一个Changelog File: 这个database Changelog file列举了数据库中所有的改变情况,该文件是以xml为基础的,下面是一个空的xml文件: <?xm ...
- Liquibase的简单使用
LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.它的目标是提供一种数据库类型无关的解决方案,通过执 ...
- [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習
透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...
- flyway和liquibase的使用样例
在代码上我们有svn和git等诸多的版本控制方法. 但是在数据库上却没有相应的工具.一度导致多环境见的数据库同步难以维持. flyway和liquibase都是常见的数据库版本控制工具. flyway ...
- [心得] 如何利用liquibase進行資料庫版本控制 - 基礎觀念
前言 - 會寫這篇除了是要記錄一下使用的過程之外,也是發現到網路上找來的教學幾乎都是跟其它環境做結合 比較沒有單純利用command進行的流程.也沒有整體觀念的介紹,所以將我所理解的整理分享給大家. ...
- LiquiBase 学习
preconditions mysql database is installed maven has been setted up properly add depedenceies apply p ...
- Liquibase使用入门
1.LiquiBase简介 LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态.LiquiBase的主 ...
- eclipse liquibase 插件
http://marketplace.eclipse.org/category/free-tagging/liquibase http://marketplace.eclipse.org/market ...
随机推荐
- 从ftp服务器进行批量下载,处理文件名保存时重名的问题,更改重名文件名方式为给后面加1、2、3等数字,保持后缀不变
公司最近有一个从ftp批量下载文件的需求,但是文件名重复总会报错 没办法,自己下班后写了一个小算法 仿照桶排序的原理,实现了这个小功能,直接上代码: String[] test = {"ha ...
- Tcpdump移植
摘要: tcpdump对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.n ...
- Python之Web前端Ajax
Ajax: 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操 ...
- 【LOJ】#3093. 「BJOI2019」光线
LOJ#3093. 「BJOI2019」光线 从下到上把两面镜子合成一个 新的镜子是\((\frac{a_{i}a_{i + 1}}{1 - b_{i}b_{i + 1}},b_{i} + \frac ...
- SpringBoot起飞系列-拦截器和统一错误处理(七)
一.前言 在前边部分我们已经学会了基本的web开发流程,在web开发中,我们通常会对请求做统一处理,比如未登录的用户要拦截掉相关请求,报错页面统一显示等等,这些都需要配置,可以大大简化我们的代码,实现 ...
- linux常用终端命令(三)用户和权限
三.用户权限相关命令 用户 和 权限的基本概念 用户管理 终端命令 组管理 终端命令 修改权限 终端命令 1.用户和权限的基本概念 1.1.基本概念 用户管理包括 用户 与 组 管理 linux系统中 ...
- phpQuery简介
接上一篇,使用 Snoopy 抓取回来网页之后,需要解析网页中的元素,但是对于 https://www.cnblogs.com/hellowzd/p/5163276.html
- PHPexcel使用 技巧
phpexcel不用多说了 导出表格时经常会用到 本帖主要记录一下几个经常用到的操作 # 设置自动换行 $PHPExcel->getActiveSheet()->getStyle(&q ...
- 无障碍开发(六)之ARIA在HTML中的使用规则
ARIA使用规则一 如果你使用的元素( HTML5 )具有语义化,应该使用这些元素,而不应该重新定义一个添加ARIA的角色.状态或属性的元素. 浏览器的语义化标签已经默认隐含ARIA语义,像nav,a ...
- JS基础_Unicode编码表
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...