Posts
Flyway - Enable out of order migrations
在使用 Flyway 時,預設 Migration 是會被限制只允許照順序套用的。
像是筆者這邊套上 V2 與 V3 的 Migration 後再準備 V1 的 Migration。
因為已經套到了 V3,所以較低版本的 V1 會無法套用,顯示為 Ignore 狀態。
如過要讓低於當前版本的 Migration 可被套用,可開啟 Flyway 設定檔,將 flyway.outOfOrder 設計值設為 true。
flyway.outOfOrder=true 設定後就不會因為 Migration 版本低於當前版本而被 Ignore。
也能被 Migrate 到資料庫。
只是狀態會是 Out of Order,不會是 Success。
read morePosts
Flyway - Disable Clean command
Flyway 的 Clean 命令是比較危險的命令,因此在上正式環境時會透過設定將之關閉。
開啟設定檔將 flyway.cleanDisable 設定值設定為 true 後存檔離開。
flyway.cleanDisable=true Clean 命令就會被禁止使用了。
read morePosts
Flyway - Repairs the schema history table
Flyway 的 Repair 功能可用來修復 Flyway 存放在資料庫內的資料。
像是 Migrate 發生錯誤,可用來清楚錯誤狀態。或是重新套用 Migration,去修復 Migration type/description/checkchecksum。
像是這邊筆者的資料庫狀態如下…
因為沒有造資料表所以塞資料的 Migration migrate 時會出錯。
這時資料庫內的 Migration 的狀態會是 Failed。
這時使用 Repair 功能…
flyway repair 資料庫內的 Migration 會回到 Pending 狀態。
read morePosts
Flyway - Drops all objects in the configured schemas
Flyway 的 Clean 功能能將資料庫內所有東西都清除,不論是 Table、View、還是 Procedure。
通常用在測試 Migration 時。
像是這邊有一個已經 Migration 過的資料庫。
Clean 以後…
flyway clean 資料庫內的資料都會被清掉。
我們就可以調整 Migration,重新將 Migration migrate 到資料庫,反覆操作,藉此將 Migration 調到我們預期的效果。
read morePosts
Flyway - Validates the applied migrations against the available ones
Flyway 的 Validate 可依據資料庫的 Migrate 資料與本地的 Migration 資訊做些驗證。
如果資料庫的 Migrate 資料與本地的 Migration 比對,Migration 的名字、類型、Checksum 不同,驗證錯誤。
如果資料庫的 Migrate 資料在本地已找不到對應的 Migration,驗證錯誤。
如果本地的 Migration 還未 Migrate 到資料庫,驗證錯誤。
像是這邊筆者這邊本地的 Migration 未 Migrate 到資料庫。
驗證會錯誤。
flyway validate 將 Migration migrate 到資料庫。
flyway migrate 驗證就會通過了。
flyway validate
read morePosts
Flyway - Baselines an existing database
在使用 Flyway 時,若已有現有的資料庫,可以透過 Flyway baseline 為現有資料庫打上一個版本。
像是這邊筆者就先將現有的資料庫打上 Baseline。
flyway baseline 接著就可以照著正常 Migrate 流程下去走了。
read morePosts
Flyway - Prints the details and status information about all the migrations
要透過 Flyway 查閱 Migration 的資訊或是運行狀態,可透過 Flyway 的 info 命令。
flyway info Flyway info 會將資料庫內的 Migration 資訊與本地的 Migration 整理後呈現。
像是這邊筆者有一個空的資料庫,本地放了兩個 Migration 檔,運行 Flyway info 後會看到兩個在 Pending 狀態的 Migration。
flyway info 將 Migration migrate 進資料庫。
flyway migrate 再次調用 Flyway info,可看到兩個 Migration 都切到了 Success 狀態。
flyway info
read morePosts
Flyway - Migrates the schema to the latest version
Flyway 把所有的資料庫變更都稱為 Migration,套用資料庫變更的動作即為 Migrate。
Migration 分為 Versioned、 Undo、 Repeatable 三種。
Versioned Migration 是一般的 Migration,帶有版號,且只能運行一次。檔案格式如下:
Undo Migration 是用來還原 Versioned Migration 用的 Migration。檔案格式如下:
Repeatable Migration 是可重複運行的 Migration。檔案格式如下:
這邊筆者實際放入個檔名為 V1__Create_person_table.sql 的 Versioned Migration 到 sql 目錄,表示第一版變更,變更內容為 Create person table。
Migration 內容如下,只是簡單的建立一個名為 PERSON 的資料表。
create table PERSON ( ID int not null, NAME varchar(100) not null ); 調用 Flyway migrate 命令套用資料庫的變更。
flyway migrate 連進資料庫可看到確實套上了資料庫的變更,連帶多了一張 flyway_schema_history 的資料表,裡面存放 Flyway 套用變更的紀錄。
Migrate 時會依這紀錄檢查是否需要套用資料庫的變更。
read morePosts
Flyway - Config MariaDB
Flyway 要連結 MariaDB,可開啟 Flyway 設定檔。
vim conf/flyway.conf 設定 MariaDB 的位置與帳密。位置部分可遵循下列格式:
jdbc:mariadb://host:port/database 設定上會像下面這樣:
flyway.url=jdbc:mariadb://localhost:3306/db1 flyway.user=root flyway.password=pass.123
read morePosts
Flyway - Install on Linux
Flyway 要在 Linux 上使用,可到 Flyway 的下載頁面,複製 Linux 上要運行的命令。
運行命令,會進行檔案的下載、解壓縮、建立連結。
wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/5.2.4/flyway-commandline-5.2.4-linux-x64.tar.gz | tar xvz && ln -s `pwd`/flyway-5.2.4/flyway /usr/local/bin 進到 Flyway 目錄調用命令,查驗 Flyway 版本,確認安裝正確無誤。
flyway -v
read more