Liquibase介绍和安装
一、前言
1.Liquibase 是什么
- 官方原话:
Track, version, and deploy database changes
跟踪、管理和应用数据库变化
-
其实就是一个将你的数据库脚本转化为xml格式保存起来。其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操作。
-
目前支持:MySql、Maria DB、PostgreSQL、Oracle、SQL Server、DB2、HSQL、H2、SQLite等多种主流数据库。
2、为什么要使用Liquibase
通常在项目正常推进的情况下,我们会有:开发、测试、压测、准生产、生产等多套环境。
伴随着迭代发版,我们需要不断同步多套环境的数据库信息,如果每个环境都需要开发人员手动去修改,那么就是一场灾难。
因为到最后,谁也记不得在哪个环境执行了哪个操作,结果就是测试一直在群里@开发,报错啦!!
因此我们需要一个可以自动化维护各个环境数据库版本差异的工具,将人力释放出来。
二、安装和简单使用
1、安装
根据自己的操作系统下载对应的二进制包,下载地址:https://www.liquibase.org/download
- 点开你会看到这个框框,必须要输入邮箱,很难受,我就不呢
- 可以右击检查,打开控制台,找到这个表单的标签,删了就好
- 这样就可以了,好了,我们继续,下载对应版本的安装文件或者zip即可
1.2.配置环境变量
配置方式同 Java ,将压缩文件解压,配置文件夹路径到PATH路径中。
- Windows的方式:
创建环境变量 LIQUIBASE_HOME = D:\xxxxx
然后PATH 加入即可 %LIQUIBASE_HOME%
2、Liquibase支持的集成方式
Liquibase 支持集成的方式有多种
- Command 命令行模式
- Maven
- Ant
- Spring Boot
3、核心文件
不管哪种集成方式,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="xxx">
<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 命令,可以通过<sqlFile>
引入外置的 SQL 文件,<rollback>
标签则是回滚时想要执行的操作。
4、核心表
Liquibase 本身拥有一个记录当前已操作的行为记录表:DATABASECHANGELOG,(如果操作的数据库没有这张表,就自动创建)
ID与AUTHOR 与 <changeSet id="test-1" author="xxx">
一一对应
FILENAME:当前执行的 changeSet.xml 是哪一个
DATEEXECUTED:执行时间
ORDEREXECUTED:执行次序
EXECTYPE:执行状态
MD5SUM:SQL 文件的MD5 校验,请记得这个,这个很重要
TAG:版本号
LABELS:标签
5、Command
Liquibase 命令行由参数+指令构成,通过 liquibase --help 可以查看具体指令、参数及作用注释,这里截取一部分展示
- 通常情况下,我们对数据库最常用的操作就是
升级
与回滚
,对应 Liquibase 的指令就是update
与rollback系列
5.1.update
liquibase
--driver=$liquibase_driver
--url=$MYSQL_DB_URL
--username=$DB_USER
--password=$PASSWORD
--classpath=$liquibase_classpath
--changeLogFile=文件路径/master.xml
update
5.2.rollback
rollback 操作常用的有多个,分别是rollback ,rollbackToDate , rollbackCount
- rollback :将数据库回退到指定的 tag 版本状态,tag 是对已操作的 changSet 版本记录,类似于 Git 的 tag,通过 liquibase tag 完成;
- rollbackToDate :将数据库回退到指定的 date、 time 时间状态
- rollbackCount :回退指定数量的 changSet ,每个 记为1;
- 执行 rollback v1.01 ,则序号8~14的操作会回滚,数据是执行了1~7操作的状态
- 执行 rollbackToDate 2020-07-05,则时间是2020-07-05 之后的操作全部回滚
- 执行 rollbackCount 5,则从后向前数 5 个操作,10~14 将会回滚,数据是执行了1~9操作的状态