一、flyway介紹
Flyway是一款開源的數據庫版本管理工具,它更傾向於規約優於配置的方式。Flyway可以獨立於應用實現管理並跟蹤數據庫變更,支持數據庫版本自動升級,並且有一套默認的規約,不需要復雜的配置,Migrations可以寫成SQL腳本,也可以寫在Java代碼中,不僅支持Command Line和Java API,還支持Build構建工具和Spring Boot等,同時在分布式環境下能夠安全可靠地升級數據庫,同時也支持失敗恢復等。
Flyway主要基於6種基本命令:Migrate, Clean, Info, Validate, Baseline and Repair。
目前支持的數據庫主要有:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL(including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL(including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix.
二、客戶端使用說明
2.1客戶端相關文件介紹
解壓flyway-commandline-4.1.2-windows-x64.zip打開flyway-4.1.2目錄

conf:主要存放一些數據庫的配置文件,常見的配置有
flyway.url=jdbc:oracle:thin:@192.168.10.222:1521:orcl ----數據庫url+數據庫名
flyway.user=gams0308 ----數據庫用戶名
flyway.password=bs ----數據庫密碼
drivers:數據庫連接驅動,若出現以下錯誤,則把對應的數據庫驅動放在這個文件夾下

jars和jre是flyway相關java運行環境可以不用操作
lib是flyway相關jar包
重點關注sql文件夾,這里頭存放flyway要執行的腳本。
腳本命名規則:

1、前綴(可配置,默認值:V)
2、版本(以點或下划線區分開來)
3、分隔符(兩個下划線)
4、描述(下划線或空格分開)
5、后綴(可配置,默認情況下:SQL)
2.2 Flyway常用的命令介紹
命令一:Migrate
Migrate是指把數據庫Schema遷移到最新版本,是Flyway工作流的核心功能,Flyway在Migrate時會檢查Metadata(元數據)表,如果不存在會創建Metadata表,Metadata表主要用於記錄版本變更歷史以及Checksum之類的。
結合客戶端理解:
執行sql文件夾中未執行的sql,將sql版本更到最新。
命令二:Clean
Clean相對比較容易理解,即清除掉對應數據庫Schema中的所有對象,包括表結構,視圖,存儲過程,函數以及所有的數據等都會被清除。
Clean操作在開發和測試階段是非常有用的,它能夠幫助快速有效地更新和重新生成數據庫表結構,
特別注意:在生產環境上禁止使用該命令,使用不當將刪除所有生產數據表!
結合客戶端理解:
刪除制定數據庫里頭的所有表。
命令三:Info
Info用於打印所有Migrations的詳細和狀態信息,其實也是通過Metadata表和Migrations完成的,下圖很好地示意了Info打印出來的信息。
Info能夠幫助快速定位當前的數據庫版本,以及查看執行成功和失敗的Migrations。
結合客戶端理解:
輸入所有flyway執行過的信息。
命令四:Validate
Validate是指驗證已經Apply的Migrations是否有變更,Flyway是默認是開啟驗證的。
Validate原理是對比Metadata表與本地Migrations的Checksum值,如果值相同則驗證通過,否則驗證失敗,從而可以防止對已經Apply到數據庫的本地Migrations的無意修改。
結合客戶端理解:
校驗schema_version表的執行情況
命令五:Baseline
Baseline針對已經存在Schema結構的數據庫的一種解決方案,即實現在非空數據庫中新建Metadata表,並把Migrations應用到該數據庫。
Baseline可以應用到特定的版本,這樣在已有表結構的數據庫中也可以實現添加Metadata表,從而利用Flyway進行新Migrations的管理了。
結合客戶端理解:
設定schema_version表的基線執行版本。
命令六:Repair
Repair操作能夠修復Metadata表,該操作在Metadata表出現錯誤時是非常有用的。
Repair會修復Metadata表的錯誤,通常有兩種用途:
移除失敗的Migration記錄,該問題只是針對不支持DDL事務的數據庫。
重新調整已經應用的Migratons的Checksums值,比如:某個Migratinon已經被應用,但本地進行了修改,又期望重新應用並調整Checksum值,不過盡量不要這樣操作,否則可能造成其它環境失敗。
結合客戶端理解:
刪除schema_version表里頭失敗的記錄。
三、常用操作
3.1 首先配置cof文件夾里頭的flyway.conf文件,制定數據庫以及用戶名密碼:

例如:

3.2 將要執行sql放到sql文件夾中,若腳本有執行順序的話,先執行的命名排前。

3.3 右鍵shift+鼠標右鍵,打開控制台。

3.4 flyway migrate執行數據庫更新操作。
第一次執行flyway migrate可能會報以下錯誤

數據要先指定基線版本,先執行flyway baseline,這時候在對應的數據庫里頭創建一張版本更新表:schema_version,然后再執行flyway migrate,特別注意執行flyway baseline后腳本最低版本要從2開始。另外注意:由於flyway創建schema_version表時候,多了””,所以查詢數據庫要加””,例如:select t.* from "schema_version" t;


3.5 flyway info輸出操作記錄信息。

3.6 若執行腳本報錯,比如數據表id要求唯一,這時候執行flyway migrate會報錯。

schema_version表里頭最新的一個腳本的success字段就會為0,代表失敗。

修改對應的腳本,flyway repair刪除錯誤記錄,然后再執行flyway migrate就可以了。


3.7 flyway baseline設定flyway基線。
在未執行flyway migrate之前,可以執行該命令,否則執行報錯。
