前言
Flyway是一款管理并跟蹤資料庫遷移(migrate)的資料庫版本管理工具,它可以像SVN管理不同人的代碼那樣,管理不同人的sql腳本,從而做到資料庫同步,
它可以幫助我們在不同環境保持資料庫的同步,減少手工操作,同時也減少了遺漏的機會,
Flyway可以集成在專案中,可以與Spring 框結合,在專案發版時,自動執行資料庫腳本,無需人為執行資料庫同步操作,
- 在主專案中添加flyway的maven添加依賴
<!-- flyway--> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.2.1</version> </dependency>
將上面的依賴添加到主專案的pom.xml中
2. 在application.yml 組態檔中配置flyway相關配置
需要注意的是,flyway配置放在spring配置下、根據自己實際情況配置相關引數
# flyway 配置
flyway:
# 執行基線時用來標記已有Schema的版本.(默認值:1)
baseline-version: 1
# 開啟Flyway(默認true)
enabled: true
# SQL遷移的檔案名前綴(默認值為V 可以不設定)
sql-migration-prefix: V
# 遷移sql腳本檔案名稱的分隔符(默認2個下劃線__)
sqlMigrationSeparator: __
# SQL遷移的檔案名后綴(默認值:.sql 可以不設定)
sql-migration-suffixes: .sql
# 遷移時是否進行校驗,默認true
validateOnMigrate: true
# 在沒有元資料表的情況下,針對非空Schema執行遷移時是否自動呼叫基線,
baseline-on-migrate: true
# 遷移腳本的位置(默認為classpath:db/migration)
locations: classpath:db/migration
# 資料庫連接配置
url: ${spring.datasource.dynamic.datasource.master.url}
user: ${spring.datasource.dynamic.datasource.master.username}
password: ${spring.datasource.dynamic.datasource.master.password}
# 需要升級的資料庫實體名
schemas: jeecg-boot
# 編碼格式
encoding: UTF-8
# 忽略腳本順序:開發環境應該設定true,flyway將能加載漏掉的老版本SQL檔案 生成環境需要設定false
out-of-order: true
# 發生驗證的錯誤時是否執行clean操作(如SQL執行失敗),默認false,生產中必須使用false,
clean-on-validation-error: true
# 是否禁用clean操作,默認false,生產中必須使用true
clean-disabled: false
Springboot flyway配置說明
-- spring boot flyway 配置說明
flyway.baseline-description對執行遷移時基準版本的描述.
flyway.baseline-on-migrate當遷移時發現目標schema非空,而且帶有沒有元資料的表時,是否自動執行基準遷移,默認false.
flyway.baseline-version開始執行基準遷移時對現有的schema的版本打標簽,默認值為1.
flyway.check-location檢查遷移腳本的位置是否存在,默認false.
flyway.clean-on-validation-error當發現校驗錯誤時是否自動呼叫clean,默認false.
flyway.enabled是否開啟flywary,默認true.
flyway.encoding設定遷移時的編碼,默認UTF-8.
flyway.ignore-failed-future-migration當讀取元資料表時是否忽略錯誤的遷移,默認false.
flyway.init-sqls當初始化好連接時要執行的SQL.
flyway.locations遷移腳本的位置,默認db/migration.
flyway.out-of-order是否允許無序的遷移,默認false.
flyway.password目標資料庫的密碼.
flyway.placeholder-prefix設定每個placeholder的前綴,默認${.
flyway.placeholder-replacementplaceholders是否要被替換,默認true.
flyway.placeholder-suffix設定每個placeholder的后綴,默認}.
flyway.placeholders.[placeholder name]設定placeholder的value
flyway.schemas設定需要flywary遷移的schema,大小寫敏感,默認為連接默認的schema.
flyway.sql-migration-prefix遷移檔案的前綴,默認為V.
flyway.sql-migration-separator遷移腳本的檔案名分隔符,默認__
flyway.sql-migration-suffix遷移腳本的后綴,默認為.sql
flyway.tableflyway使用的元資料表名,默認為schema_version
flyway.target遷移時使用的目標版本,默認為latest version
flyway.url遷移時使用的JDBC URL,如果沒有指定的話,將使用配置的主資料源
flyway.user遷移資料庫的用戶名
flyway.validate-on-migrate遷移時是否校驗,默認為true.
-- spring boot flyway 配置說明
3.在遷移腳本的檔案夾中創建對應sql腳本 
在腳本中寫入相關sql陳述句

SpringBoot應用運行時flyway會根據腳本進行資料庫的初始化,執行的順序會根據腳本版本號由低到高按順序執行(1.0 -> 1.0.1 -> 1.0.2),每執行完一個版本腳本都會向記錄表flyway_history_schema插入一條資料,
若添加了新的版本腳本,應用啟動時flyway會根據腳本檔案版本到記錄表flyway_history_schema查詢是否有對應的版本腳本被執行了,如果沒有相應的版本腳本記錄才會執行腳本,
不過需要注意:flyway不支持版本回滾,(需手動,比較悲劇的一點)、所以需要準備兩份sql,如果遷移的sql執行成功后需要回滾,就執行對應的回滾sql,如果遷移失敗,flyway可以通過注解執行回滾,
4.啟動了SpringBoot專案后,就會自動幫你執行SQL檔案
執行歷史可以在 flyway_schema_history 表中查看、已經執行過的遷移sql就不會再執行,主要是在這個歷史表中控制,如果需要重新執行,那么洗掉對應版本及以后的執行歷史重啟專案就會重新執行對應腳本

重繪對應資料庫,就可以看到通過遷移腳本生成的表結構,
使用總結
我們是在中途嘗試使用flyway,所以開發環境會有一個已存在的資料庫,我們需要從開發環境中匯出資料庫腳本,并對開發環境資料庫進行baseline標記,匯出的腳本可用于新環境的部署,
如果我們已經有了生產環境,而且生產環境和開發環境的資料庫已經有了較大的差異,暫時可以想到的方案大概有2個方案:
方案一:
在生產環境備份資料庫,然后創建一個全新的資料庫,手動將備份庫里的資料匯入到新的資料庫,
方案二:
基于生產環境的資料庫,創建V1版本的腳本;基于開發庫相對于生產庫的變更,創建V2版本的腳本,在開發環境baseline,然后修改版本記錄,改為2,在生產環境中baseline,然后migrate使其升級到2,
方案一:
需要更多的人工介入,但是比較穩妥;
方案二:
難點在于溯源出正確的差異,編制V2腳本,
本次的學習到這里就結束了,因為圖圖也是第一次接觸這種資料遷移軟體,所以總結不是很到位,如果有問題可以加圖圖微信,大家一起學習、一起來解決,
如果對您有幫助 請點個關注,萬分感謝
(QQ招聘群 710566091微信招聘群 請加圖圖微信)

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/270919.html
標籤:其他
上一篇:2021軟工-個人閱讀作業#2
