粘一段官方的解釋sql
Track, version, and deploy database changes跟蹤、管理和應用數據庫變化shell
說白了,就是一個將你的數據庫腳本轉化爲xml格式保存起來。數據庫
其中包含了你對數據庫的改變,以及數據庫的版本信息,方便數據的升級和回滾等操做。bash
目前支持:MySql、Maria DB、PostgreSQL、Oracle、SQL Server、DB二、HSQL、H二、SQLite等多種主流數據庫。工具
一般在項目正常推動的狀況下,咱們會有:開發、測試、壓測、準生產、生產等多套環境。測試
伴隨着迭代發版,咱們須要不斷同步多套環境的數據庫信息,若是每一個環境都須要開發人員手動去修改,那麼就是一場災難。ui
由於到最後,誰也記不得在哪一個環境執行了哪一個操做,結果就是測試一直在羣裏@開發,報錯啦!!url
所以咱們須要一個能夠自動化維護各個環境數據庫版本差別的工具,將人力釋放出來。spa
這也是程序的奧義,簡化繁瑣的操做操作系統
根據本身的操做系統下載對應的二進制包,下載地址:https://www.liquibase.org/dow...
配置方式同 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 檢查時候配置成功
Liquibase 支持集成的方式有多種
Maven 與 Spring Boot 相似,這裏先介紹一下 Command 模式,Maven 與 Spring Boot 集成在之後的文章中再作詳細介紹。
無論哪一種集成方式,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> 標籤則是回滾時想要執行的操做。
Liquibase 自己擁有一個記錄當前已操做的行爲記錄表:DATABASECHANGELOG
ID與AUTHOR 與 <changeSet> 裏一一對應
FILENAME:當前執行的 changeSet.xml 是哪個
DATEEXECUTED:執行時間
ORDEREXECUTED:執行次序
EXECTYPE:執行狀態
MD5SUM:SQL 文件的MD5 校驗,請記得這個,後期將注意事項是會說到
TAG:版本號
LABELS:標籤
Liquibase 命令行由參數+指令構成,經過 liquibase --help 能夠查看具體指令、參數及做用註釋,這裏截取一部分展現
一般狀況下,咱們對數據庫最經常使用的操做就是升級
與回滾
,對應 Liquibase 的指令就是update
與 rollback系列
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
執行這樣的命令就能夠將你定義的數據庫操做同步到你想要同步的環境中
rollback 操做經常使用的有多個,分別是rollback <tag>,rollbackToDate <date/time>, rollbackCount <value>
舉個栗子,當前已執行的
本章簡單介紹了一下 Liquibase 的使用,下章詳細介紹 Command 的具體實踐。