文章目錄
介紹
快速使用
Springboot中
引入依賴
配置日志文件ChangeLog
編寫變更記錄ChangeSet
Maven中
引入依賴
配置liquibase.properties
編寫變更記錄ChangeSet
版本回滾
回滾指定次數
回滾到指定tag
輸出回滾語句
輸出變更記錄
一些規范
參考資料
介紹
Liquibase是一個用於數據庫重構和遷移的開源工具,通過日志文件的形式記錄數據庫的變更,然后執行日志文件中的修改,將數據庫更新或回滾到一致的狀態。它的目標是提供一種數據庫類型無關的解決方案,通過執行schema類型的文件來達到遷移。其有點主要有以下:
支持幾乎所有主流的數據庫,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
支持多開發者的協作維護;
日志文件支持多種格式,如XML, YAML, JSON, SQL等;
支持多種運行方式,如命令行、Spring集成、Maven插件、Gradle插件等。
快速使用
Springboot中
引入依賴
<dependencies> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency> <dependency> </dependencies>
配置日志文件ChangeLog
- 在
resources
目錄中創建/db/changelog
目錄作為日志文件存放目錄 - 在目錄中創建日志文件
db.changelog-master.yml
- 在
application.yml
中配置changelog路徑
spring: liquibase: # 不配置默認會查找'classpath:/db/changelog/db.changelog-master.yaml'文件 change-log: 'classpath:/db/changelog/db.changelog-master.yml'
編寫變更記錄ChangeSet
- 編寫初始數據庫腳本
databaseChangeLog: - changeSet: # 唯一id,建議使用Flayway的命名格式'V<version>[_<SEQ>][__description]' id: V1.0_0__init # 作者 author: Cheivin # 描述 comment: "初始化腳本內容,加載初始數據" # 啟用事物 runInTransaction: true # 變更腳本 changes: # 創建表格 - createTable: tableName: user columns: - column: name: id type: int autoIncrement: true constraints: primaryKey: true nullable: false remarks: - column: name: username type: VARCHAR(50) constraints: nullable: false - column: name: password type: VARCHAR(50) constraints: nullable: false # 加載數據 - loadData: tableName: user columns: - column: header: username name: username - column: header: password name: password encoding: UTF-8 file: db/data/init-data.csv # 標記,用於回滾時指定版本 - tagDatabase: tag: V1.0_0__init
- 運行項目后,查看數據庫
- 修改changelog,增加變更數據庫腳本
# 在databaseChangeLog后追加 - changeSet: id: V1.0_1__mod author: Cheivin comment: "修改用戶表,增加賬單表" runInTransaction: true changes: # 通過標准格式添加字段 - addColumn: # 目標表 tableName: user columns: - column: name: state type: tinyint # 默認值 defaultValueNumeric: 0 remarks: '用戶狀態,0:未激活,1:激活,-1:禁用' - column: name: identity type: int # 默認值 defaultValueNumeric: 999 remarks: '用戶身份,999:管理員' # 通過sql語句操作數據庫 - sql: sql: insert into user (username,password,state,identity) values ('admin','admin',1,999) # 通過sql文件操作數據庫 - sqlFile: encoding: utf8 path: db/changelog/V1.0_1__mod_bill.sql - tagDatabase: tag: V1.0_1__mod # 回滾語句 - rollback: - delete: tableName: user where: username='admin' - dropTable: tableName: user_bill
Maven中
引入依賴
<build> <plugins> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>3.6.3</version> <configuration> <!-- 配置文件,必須放在resource目錄下 --> <propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile> </configuration> <executions> <!-- 默認mvn啟動時執行更新操作 --> <execution> <phase>process-resources</phase> <goals> <goal>update</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
配置liquibase.properties
# 日志文件路徑,必須放在resource目錄下 changeLogFile=src/main/resources/liquibase/db.changelog-master.yml # 數據庫地址 url=jdbc:mysql://localhost:3306/liquibase_mvn?useSSL=false&useUnicode=true&characterEncoding=UTF-8 # 賬號 username=root # 密碼 password=root
編寫變更記錄ChangeSet
- 編寫初始數據庫腳本
databaseChangeLog: - changeSet: # 唯一id,建議使用Flayway的命名格式'V<version>[_<SEQ>][__description]' id: V1.0_0__init # 作者 author: Cheivin # 描述 comment: "初始化腳本內容,加載初始數據" # 啟用事物 runInTransaction: true # 變更腳本 changes: # 創建表格 - createTable: tableName: user remarks: '用戶表' columns: - column: name: id type: int autoIncrement: true constraints: primaryKey: true nullable: false - column: name: username type: VARCHAR(50) constraints: nullable: false remarks: '用戶名' - column: name: password type: VARCHAR(50) constraints: nullable: false remarks: '密碼' # 加載數據 - loadData: tableName: user columns: - column: header: username name: username - column: header: password name: password encoding: UTF-8 file: src/main/resources/liquibase/data/init-data.csv # 標記,用於回滾時指定版本 - tagDatabase: tag: V1.0_0__init
- 運行項目后,查看數據庫
- 修改changelog,增加變更數據庫腳本
# 在databaseChangeLog后追加 - changeSet: id: V1.0_1__mod author: Cheivin comment: "修改用戶表,增加賬單表" runInTransaction: true changes: # 通過標准格式添加字段 - addColumn: # 目標表 tableName: user columns: - column: name: state type: tinyint # 默認值 defaultValueNumeric: 0 remarks: '用戶狀態,0:未激活,1:激活,-1:禁用' - column: name: identity type: int # 默認值 defaultValueNumeric: 999 remarks: '用戶身份,999:管理員' # 通過sql語句操作數據庫 - sql: sql: insert into user (username,password,state,identity) values ('admin','admin',1,999) # 通過sql文件操作數據庫 - sqlFile: encoding: utf8 path: src/main/resources/liquibase/V1.0_1__mod_bill.sql - tagDatabase: tag: V1.0_1__mod # 回滾語句 - rollback: - delete: tableName: user where: username='admin' - dropTable: tableName: user_bill
版本回滾
回滾指定次數
命令格式
mvn liquibase:rollback -Dliquibase.rollbackCount=次數
eg:
mvn liquibase:rollback -Dliquibase.rollbackCount=1
回滾到指定tag
命令格式
mvn liquibase:rollback -Dliquibase.rollbackTag=tag名稱
eg:
mvn liquibase:rollback -Dliquibase.rollbackTag=V1.0_0__init
輸出回滾語句
命令格式
mvn liquibase:rollbackSQL -Dliquibase.rollbackCount=次數
mvn liquibase:rollbackSQL -Dliquibase.rollbackTag=tag名稱
將會在target/liquibase目錄中生成migrate.sql文件
輸出變更記錄
命令格式
mvn liquibase:dbDoc
將會在target/liquibase目錄中生成dbDoc目錄,打開index.html可查看
一些規范
ChangeSet id建議使用Flayway的命名格式V<version>[_<SEQ>][__description],如V1.0_0__init。或使用[任務ID]-[日期]-[序號],如T100-20190705-001
ChangeSet必須填寫author
Liquibase禁止對業務數據進行sql操作
所有表,列要加remarks進行注釋
已經執行過的ChangeSet嚴禁修改。
不要隨便升級項目liquibase版本,特別是大版本升級。不同版本ChangeSet MD5SUM的算法不一樣。
參考資料
官方文檔 http://www.liquibase.org/documentation/
changeset配置文檔 http://www.liquibase.org/documentation/changes/index.html
————————————————
版權聲明:本文為CSDN博主「Cheivin」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhao0416/article/details/94733610
————————————————
版權聲明:本文為CSDN博主「Cheivin」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhao0416/article/details/94733610