Liquibase 数据库版本管理工具:1.安装

Liquibase 是什么

粘一段官方的解释sql

Track, version, and deploy database changes

跟踪、管理和应用数据库变化shell

说白了,就是一个将你的数据库脚本转化为xml格式保存起来。数据库

其中包含了你对数据库的改变,以及数据库的版本信息,方便数据的升级和回滚等操做。bash

目前支持:MySql、Maria DB、PostgreSQL、Oracle、SQL Server、DB二、HSQL、H二、SQLite等多种主流数据库。工具

2.为何须要Liquibase

一般在项目正常推动的状况下,咱们会有:开发、测试、压测、准生产、生产等多套环境。测试

伴随着迭代发版,咱们须要不断同步多套环境的数据库信息,若是每一个环境都须要开发人员手动去修改,那么就是一场灾难。ui

由于到最后,谁也记不得在哪一个环境执行了哪一个操做,结果就是测试一直在群里@开发,报错啦!!url

所以咱们须要一个能够自动化维护各个环境数据库版本差别的工具,将人力释放出来。spa

这也是程序的奥义,简化繁琐的操做操作系统

3.配置Liquibase环境

1.下载Liquibase

根据本身的操做系统下载对应的二进制包,下载地址:https://www.liquibase.org/dow...

down.png

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 检查时候配置成功
path.png

4.Liquibase支持的集成方式

Liquibase 支持集成的方式有多种

  • Command 命令行模式
  • Maven
  • Ant
  • Spring Boot

Maven 与 Spring Boot 相似,这里先介绍一下 Command 模式,Maven 与 Spring Boot 集成在之后的文章中再作详细介绍。

5.核心文件

无论哪一种集成方式,Liquibase 最为核心的文件就是 changeSet.xml,它记录了你对数据库的每一步操做,Liquibase 因此的操做都依赖于 changeSet.xml 文件的内容。

空的 changeSet.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 命令,能够经过 <sqlFile> 引入外置的 SQL 文件,<rollback> 标签则是回滚时想要执行的操做。

6.核心表

Liquibase 自己拥有一个记录当前已操做的行为记录表:DATABASECHANGELOG
logtable.png

ID与AUTHOR 与 <changeSet> 里一一对应

FILENAME:当前执行的 changeSet.xml 是哪个

DATEEXECUTED:执行时间

ORDEREXECUTED:执行次序

EXECTYPE:执行状态

MD5SUM:SQL 文件的MD5 校验,请记得这个,后期将注意事项是会说到

TAG:版本号

LABELS:标签

7.Command

Liquibase 命令行由参数+指令构成,经过 liquibase --help 能够查看具体指令、参数及做用注释,这里截取一部分展现

command1.png

command2.png
一般状况下,咱们对数据库最经常使用的操做就是升级回滚,对应 Liquibase 的指令就是updaterollback系列

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中定义的 changeSet.xml 文件路径,名称能够自定义,这里叫master.xml

执行这样的命令就能够将你定义的数据库操做同步到你想要同步的环境中

2.rollback

rollback 操做经常使用的有多个,分别是rollback <tag>,rollbackToDate <date/time>, rollbackCount <value>

  • rollback <tag> :将数据库回退到指定的 tag 版本状态,tag 是对已操做的 changSet 版本记录,相似于 Git 的 tag,经过 liquibase tag 完成;
  • rollbackToDate <date/time>:将数据库回退到指定的 date、 time 时间状态
  • rollbackCount <value>:回退指定数量的 changSet ,每一个 <changeSet> 记为1;

举个栗子,当前已执行的
table.png

  • 执行 rollback v1.01 ,则序号8~14的操做会回滚,数据是执行了1~7操做的状态
  • 执行 rollbackToDate 2020-07-05,则时间是2020-07-05 以后的操做所有回滚
  • 执行 rollbackCount 5,则从后向前数 5 个操做,10~14 将会回滚,数据是执行了1~9操做的状态

本章简单介绍了一下 Liquibase 的使用,下章详细介绍 Command 的具体实践。