flyway數據庫管理

最近學習新項目時,數據庫使用flyway進行管理的,以前並沒喲使用過,第一次遇到有點懵,因而瞭解了一下。java

官方文檔git

簡介

flyway是一款數據庫遷移工具,在開發中,數據庫須要遷移到不少不一樣的環境,開發環境,測試環境,生產環境等等。sql

clipboard.png

經過備份來遷移數據庫,你根本不知道你如今的數據庫處於哪一個狀態,數據庫升級腳本有沒有執行成功,執行到了哪一步這些信息都不知道,在代碼上有git能夠進行版本控制,可是在數據庫咱們卻沒有什麼很好的方式進行數據庫版本管理和遷移。數據庫

使用flyway,就能夠跟蹤數據庫版本的改變,明確數據庫處於那個狀態,而且以肯定的方式從數據庫的當前版本遷移到新版本。app

原理

當你使用flyway時,它會在數據庫尋找一個歷史版本的表,通常表名是schema_version,若是沒有flyway會建立這麼一個表,專門用來管理數據庫的版本信息。工具

clipboard.png

緊接着flyway會掃描類路徑或文件系統下面的文件,能夠是sql文件或java程序,根據版本號排序並執行。學習

clipboard.png

每執行一個版本時,flyway都會在schema_version表中記錄下此次升級,以後再執行中,對與表裏已經存在的版本,下一次就不會再執行了。測試

clipboard.png

經過這種方式,咱們能夠指定數據庫的版本,而且每次數據庫版本升級的信息都儲存在數據庫裏,升級的內容是執行的sql文件,這樣以來就能夠追蹤數據庫版本的改變,遷移也都是自動完成。spa

使用中遇到的問題

一開始不熟悉flyway,一遇到未知的問題就只能還原備份,後來我才發現,我遇到的flyway錯誤,通常都是運行的sql文件會與數據庫已經確立的結構衝突,flyway遇到這種錯誤狀況,就取消此次版本的升級,而且記錄此次版本升級失敗。
好比當我執行這個1.3.0的數據庫升級,想要在apply表中添加一個check_status字段:版本控制

clipboard.png

可是執行時卻失敗了,控制檯的報錯是這樣的:

clipboard.png

它明確的告訴了失敗的緣由,錯誤sql腳本的位置、語句等,惋惜我以前都沒注意到。
這裏的失敗是apply已經有一列check_status了,因此再添加一列相同的字段就會出錯。能夠把apply的這個字段刪除就成功經過了。

在schema_version表中明確記錄此次執行是失敗的,success字段爲0.

clipboard.png

這樣出錯了就能夠去查看排除,而不是一味地還原數據庫了。

總結

如今有愈來愈多強大的工具,合理運用能夠幫助咱們開發。

相關文章
相關標籤/搜索