資料庫版控,走起,高飛!Flyway
Contents
因為G.K.老師常常強調 Flyway 的優勢,資料庫版控、避免共用的資料庫不知道被誰扔了dirty data導致其他人開發的功能壞掉,等等的好處,所以來看看官方文件。
初探Flyway
[email protected]:
dependencies {
implementation 'org.flywaydb:flyway-core'
}
[email protected]:
spring.flyway.url=jdbc:h2:mem:flyway
spring.flyway.schemas={default_schema}
spring.flyway.user=
spring.flyway.password=
Three ways to interact with Flyway
除了提供版本控制與持續交付的功能,flyway 可以根據程式交付進度,來自動化部署資料庫。
Flyway Desktop 提供GUI讓資料庫開發跟數據家能夠追蹤資料庫物件的異動,並且在版本控制中管理資料遷移的腳本。
Flyway command-line 是可以獨立運行的套件 (只需要操作系統,不用其他支援框架),有Windows、macOS以及Linux版本。適合想要用命令列介面遷移資料庫的user,而不用將Flyway整合進應用程式,也不用安裝build tool。
另外可以用 API 將 Flway 整合進應用程式,在程式啟動時一同執行資料庫遷移。
Flyway commands
Flyway Desktop 安裝時,會一併安裝command line以及API,主要有以下命令:
- Migrate
- 將schema遷移成最新的版本
- 是Flyway workflow的中心,它會在檔案系統或你的類別路經中掃描找出可用的migrations,並比較已經執行到資料庫的遷移,如果有任何差異就會做對應的migration,以彌平差異。
- 通常是在application startup時期執行
migrate
- Clean
- 在已經配置好schemas的資料庫中,刪掉所有資料表物件
- 千萬不能用在 production DB
- 如果是複雜的資料庫結構,可能因為明確的dependency graph架構不起來,所以沒辦法清乾淨所有物件。另外有些物件考量安全性,也不會清除,例如 SQL server 的 users 資料。可以加上 afterClean callback 來額外定義要 drop 的敘述
- Info
- 可以了解當下有哪些migration已經執行了,哪一些還沒開始,何時執行的migration以及執行結果是成功或失敗。
- Validate
- 驗證可用的 migration 是否相當於已經被執行的 migration
- 可以偵測意料之外的異動,可以預防重新產生schema
- 在 migration 執行時,存進一個checksum (使用CRC32校驗)。要驗證時,就查看本地的migration與已經執行到database的 migration 是否有相同一致的
checksum
。 - 此外,可能會有一些 hotfix, migration deletion 或者異動,可能違反Flyway驗證習慣,這時候也可以客製化驗證規則
- Undo
- 復原最近一次被執行的migration版本
- 需要指定 target,這樣Flyway會綁你倒回至target之前的版本
- 如果沒有要 undo 的 versioned migration,呼叫這個undo就沒啥用
- Baseline
- 給之前已經存在的數據庫 (已經包含數據,但之前沒有被Flyway管理)建立一個基準起始版本
- Repair
- 用來修復 flyway_schema_history 資料庫的,有以下用途
- 移除failed migration entries (失敗的遷移紀錄)
只適用於不支援DDL transactions的資料庫 PostgreSQL, Oracle: 支持ddl事務 MySQL, MariaDB, SQLite: 不支持ddl事務
- DDL是create, alter, delete table schema/table/view/index
- DML則是新刪修查資料表的數據
- 重新對齊 CHECKSUMS、描述、被執行之遷移的類型 (SQL migration or Java migration),確保它跟當前的遷移紀錄保持一致
- 將所有不見的migration都標記為deleted
- 移除failed migration entries (失敗的遷移紀錄)
- 用來修復 flyway_schema_history 資料庫的,有以下用途
- Check
- 查看code, changes etc.
- Snapshot
- 只有Flyway CLI提供次功能
- 幫指定的資料庫做schema的快照
Tutorials
其他有一系列的教學可以參考下面的連結 Flyway tutorials