背景
在我們?nèi)粘.a(chǎn)品發(fā)布的過程中,代碼的版本控制可以使用git、svn工具實現(xiàn)。對于數(shù)據(jù)庫每當(dāng)發(fā)布時會出現(xiàn)手動執(zhí)行sql腳本進(jìn)行升級數(shù)據(jù)庫,中間經(jīng)常出現(xiàn)一些漏寫、錯寫情況,對數(shù)據(jù)庫的版本與代碼的版本不匹配,導(dǎo)致上線后出現(xiàn)數(shù)據(jù)庫不同步的問題。flyway就是對數(shù)據(jù)庫版本進(jìn)行控制的工具,可以對不同環(huán)境的sql進(jìn)行遷移操作。
簡介
flyway 的官網(wǎng):https://flywaydb.org/
flyway會對每次執(zhí)行過sql腳本保存到flyway_schema_history中,在數(shù)據(jù)庫中將保存sql腳本的版本號和對sql生成checksum,當(dāng)下次執(zhí)行數(shù)據(jù)庫遷移的時候就會按照版本號從低往高執(zhí)行。如果以前的版本號腳本已經(jīng)執(zhí)行過就不會執(zhí)行,如果以前版本的sql腳本已經(jīng)被修改在執(zhí)行的過程中則會報錯。對flyway的詳細(xì)描述與介紹可以查看flyway的官網(wǎng)。
Flyway的工作流程
maven使用
//配置flywaydb的maven插件org.flywaydbflyway-maven-plugin5.2.4 //插件需要配置mysql-connector 注:mysql-connector的版本號與flyway的版本 號如果flyway 5.2以上對應(yīng)msyql 8.0mysqlmysql-connector-java8.0.27 //配置信息 //配置用戶連接地址 jdbc:mysql://192.168.1.1:3306/test?characterEncoding=utf-8rootroot //配置sql腳本的保存位置filesystem:sql/flyway/migrate //配置baseline版本信息2.0.0
配置好以上maven組件,在IDEA中就可以看到flyway的快捷插件了。
在插件中undo不能使用,undo為回滾操作?;貪L操作只有使用商業(yè)版才能使用。
SQL數(shù)據(jù)位置
執(zhí)行
命令行執(zhí)行
mvn flyway:baseline //初始化數(shù)據(jù)庫鏈接mvn flyway:migrate //遷移數(shù)據(jù)
IDEA 工具執(zhí)行(點擊baseline、migrate)
SQL腳本命名規(guī)范
使用migrate必須開頭是V+版本號+“_ _“+描述.sql
如V1.0.3_20220618__increment.sql
插件比較常用的功能介紹
Baseline
對已經(jīng)存在數(shù)據(jù)庫schema結(jié)構(gòu)的數(shù)據(jù)庫的一種解決方案。實現(xiàn)在非空數(shù)據(jù)庫新建metaData flyway_schema_history表,并把Migrations應(yīng)用到該數(shù)據(jù)庫;也可以在已有表格的數(shù)據(jù)庫中添加metaData數(shù)據(jù)表。注:對已有的數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)庫來說,必須要進(jìn)行baseline,才能進(jìn)行migrate
Clean
清楚掉對應(yīng)數(shù)據(jù)庫Schema中所有的對象,包括表結(jié)構(gòu),視圖,存儲過程等,clean操作再dev和test階段很好用,但是在生產(chǎn)環(huán)境務(wù)必禁用。
Migrate
執(zhí)行migrate會在指定文件夾下的sql按照版本號依次執(zhí)行遷移操作。也就是執(zhí)行sql腳本,對已經(jīng)執(zhí)行過的sql腳本便不再執(zhí)行。