1.1、Flyway是什麼
Flyway是一款數據庫遷移(migration)工具。簡單點說,就是在你部署應用的時候,幫你執行數據庫腳本的工具。Flyway支持SQL和Java兩種類型的腳本,你可以將腳本打包到應用程序中,在應用程序啓動時,由Flyway來管理這些腳本的執行,這些腳本被Flyway稱之爲migration。
就目前而言,我們部署應用的流程大概是這樣的:
- 開發人員將應用程序打包、按順序彙總並整理數據庫升級腳本
- DBA拿到數據庫升級腳本檢查、備份、執行,以完成數據庫升級
- 應部署人員拿到應用部署包,備份、替換,以完成應用程序升級
引入Flyway之後的應用部署流程大概是這樣的:
- 開發人員將應用程序打包
- 應部署人員拿到應用部署包,備份、替換,以完成應用程序升(Flyway將自動執行升級/備份腳本)
1.2、Flyway如何工作
最簡單的理解方式是:簡單我們在一個空數據庫上部署集成了Flyway的應用:
Flyway將在這個空數據中創建一張表,用於記錄migration的執行情況,表名稱默認爲:flyway_schema_histor,老版本的表名稱:schema_version
緊接着,Flyway根據表中的記錄決定是否執行應用程序包中提供的migration
最後將執行結果寫入flyway_schema_histor並校驗執行結果
flyway_schema_histor打印有關所有遷移的詳細信息和狀態信息。
信息可讓您知道自己的立場。一覽無餘,您將看到哪些遷移已被應用,哪些遷移仍在等待執行,何時執行以及它們是否成功。
下次版本迭代時,提供新的migration,會根據flyway_schema_histor的記錄執行新migration
驗證
對照可用遷移驗證已應用的遷移。
驗證可幫助您驗證應用於數據庫的遷移是否與本地可用的遷移匹配。
這對於檢測可能阻止您可靠地重新創建架構的意外更改非常有用。
1.3、Migration
Flyway將每一個數據庫腳本稱之爲:migrations,flyway支持三種類型的migration:
- Versioned migrations:最常用的migration,可以簡單的理解爲數據庫升級腳本
- Undo migrations:數據庫版本回退腳本,需要Pro版本,忽略,而且使用過程存在較大風險,undo操作目前只能通過plugin或者command-line來執行
- Repeatable migrations:可重複執行的migration,例如create or replace腳本,當腳本checksums改變時會重新執行
SQL:簡單的SQL腳本文件,例如:
/* Single line comment */
CREATE TABLE test_user (
name VARCHAR(25) NOT NULL,
PRIMARY KEY(name)
);
/*
Multi-line
comment
*/
-- Placeholder
INSERT INTO ${tableName} (name) VALUES ('Mr. T');
1.4、所有的migration都需要遵守命名規範
文件名由以下部分組成:
- 前綴:
V
用於版本控制(可配置),U
用於撤消(可配置)和R
可重複遷移(可配置) - 版本:帶點或下劃線的版本可根據需要分隔儘可能多的部分(不適用於可重複的遷移)
- 分隔符:(
__
兩個下劃線)(可配置) - 說明:下劃線或空格分隔單詞
- 後綴:
.sql
(配置)
可選的版本化SQL遷移也可以省略分隔符和描述。
確保版本號唯一,flyway按照版本號順序執行。repeatable沒有版本號,因爲repeatable migrations會在內容改變時重複執行。