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 的具體實踐。

相關文章
相關標籤/搜索