![ca0a68cd409f2b78404a3512c58a478f.png](https://i-blog.csdnimg.cn/blog_migrate/9aabbfdf5233fafabe29b54f4fe0d352.png)
1.Liquibase 是什么
粘一段官方的解释
Track, version, and deploy database changes
跟踪、管理和应用数据库变化
说白了,就是一个将你的数据库脚本转化为xml格式保存起来。
其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。
目前支持:MySql、Maria DB、PostgreSQL、Oracle、SQL Server、DB2、HSQL、H2、SQLite等多种主流数据库。
2.为什么需要Liquibase
通常在项目正常推进的情况下,我们会有:开发、测试、压测、准生产、生产等多套环境。
伴随着迭代发版,我们需要不断同步多套环境的数据库信息,如果每个环境都需要开发人员手动去修改,那么就是一场灾难。
因为到最后,谁也记不得在哪个环境执行了哪个操作,结果就是测试一直在群里@开发,报错啦!!
因此我们需要一个可以自动化维护各个环境数据库版本差异的工具,将人力释放出来。
这也是程序的奥义,简化繁琐的操作
3.配置Liquibase环境
3.1.下载Liquibase
根据自己的操作系统下载对应的二进制包,下载地址:https://www.liquibase.org/download
![579325355fc2bd289091a6081b1cfe2e.png](https://i-blog.csdnimg.cn/blog_migrate/74711b2a4a39f82231fd468e00f198ff.png)
3.2.配置环境变量
配置方式同 Java ,将压缩文件解压,配置文件夹路径到PATH路径中。
以 Mac 为例,文件夹路径为:/Users/jiaotd/liquibase-4.0.0-beta1
修改 ~/.bash_profile 文件,添加如下配置
export LIQUIBASE_HOME=/Users/jiaotd/liquibase-4.0.0-beta1
export PATH=$PATH:$LIQUIBASE_HOME
执行 source ~/.bash_profile 加载环境变量
执行 liquibase --version 检查时候配置成功
![b01d4aef6dc6621e09ae435ccb8c39a6.png](https://i-blog.csdnimg.cn/blog_migrate/e3867ab4163bd997a93f343d73ad90fc.png)
4.Liquibase支持的集成方式
Liquibase 支持集成的方式有多种
- Command 命令行模式
- Maven
- Ant
- Spring Boot
Maven 与 Spring Boot 类似,这里先介绍一下 Command 模式,Maven 与 Spring Boot 集成在以后的文章中再做详细介绍。
5.核心文件
不管哪种集成方式,Liquibase 最为核心的文件就是 changelog.xml,它记录了你对数据库的每一步操作,Liquibase 所以的操作都依赖于 changelog.xml 文件的内容。
空的 changelog.xml 内容如下:
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
</databaseChangeLog>
Liquibase 将每一步的数据库操作定义为一个 changeSet,格式如下:
<changeSet id="test-1" author="jiaotd">
<sql>create table xxx(id int(11));</sql>
<sqlFile path="xxx.sql"/>
<rollback>
<sql>drop table xxx;</sql>
<sqlFile path="xxx-rollback.sql"/>
</rollback>
</changeSet>
在 changeSet 中,你可以直接使用 标签写 SQL 命令,可以通过 引入外置的 SQL 文件, 标签则是回滚时想要执行的操作。
6.核心表
Liquibase 本身拥有一个记录当前已操作的行为记录表:DATABASECHANGELOG
![5bc95121d722a01820f34ebf42c9bcad.png](https://i-blog.csdnimg.cn/blog_migrate/f391c58acf38fd01b0508231cea99f94.png)
ID与AUTHOR 与 里一一对应
FILENAME:当前执行的 changeSet.xml 是哪一个
DATEEXECUTED:执行时间
ORDEREXECUTED:执行次序
EXECTYPE:执行状态
MD5SUM:SQL 文件的MD5 校验,请记得这个,后期将注意事项是会说到
TAG:版本号
LABELS:标签
7.Command
Liquibase 命令行由参数+指令构成,通过 liquibase --help 可以查看具体指令、参数及作用注释,这里截取一部分展示
![9fcdba4029fdef9553f35bb3f128fc35.png](https://i-blog.csdnimg.cn/blog_migrate/1743796676b0da88606ec7df17a97445.jpeg)
![710e6bb12cced86d1ac51622141ee26d.png](https://i-blog.csdnimg.cn/blog_migrate/4193623c2987cae959a10dfd079817d8.jpeg)
通常情况下,我们对数据库最常用的操作就是升级
与回滚
,对应 Liquibase 的指令就是update
与 rollback系列
7.1.update
liquibase
--driver=$liquibase_driver
--url=$MYSQL_DB_URL
--username=$DB_USER
--password=$PASSWORD
--classpath=$liquibase_classpath
--changeLogFile=文件路径/master.xml
update
--classpath:数据库驱动路径
--changeLogFile :就是5中定义的 changelog.xml 文件路径,名称可以自定义,这里叫master.xml
执行这样的命令就可以将你定义的数据库操作同步到你想要同步的环境中
7.2.rollback
rollback 操作常用的有多个,分别是rollback ,rollbackToDate , rollbackCount
- rollback :将数据库回退到指定的 tag 版本状态,tag 是对已操作的 changSet 版本记录,类似于 Git 的 tag,通过 liquibase tag 完成;
- rollbackToDate :将数据库回退到指定的 date、 time 时间状态
- rollbackCount :回退指定数量的 changSet ,每个 记为1;
举个栗子,当前已执行的
![f123a6e1564837df8aa8510367276523.png](https://i-blog.csdnimg.cn/blog_migrate/ce3aada0bea85635640ad9a1ef1d3edc.jpeg)
- 执行 rollback v1.01 ,则序号8~14的操作会回滚,数据是执行了1~7操作的状态
- 执行 rollbackToDate 2020-07-05,则时间是2020-07-05 之后的操作全部回滚
- 执行 rollbackCount 5,则从后向前数 5 个操作,10~14 将会回滚,数据是执行了1~9操作的状态
本章简单介绍了一下 Liquibase 的使用,下章详细介绍 Command 的具体实践。
Liquibase 系列文章:
2.changelog 详解:
九人稚:数据库版本管理之Liquibase:2.changelog 详解zhuanlan.zhihu.com![e7bb93d66d68f6bc08cbb9c74dcd7233.png](https://i-blog.csdnimg.cn/blog_migrate/61fea71124ce9d1cbc17c4aff468a797.png)
3. changeSet 变更集详解:
九人稚:Liquibase 数据库版本管理工具:3. changeSet 变更集详解zhuanlan.zhihu.com![e7bb93d66d68f6bc08cbb9c74dcd7233.png](https://i-blog.csdnimg.cn/blog_migrate/61fea71124ce9d1cbc17c4aff468a797.png)