返回文章列表

文章

Liquibase是什么,有什么用,怎么用,在什么时候用?

Liquibase 是一个开源的数据库变更管理(schema migration)工具,它通过“声明式”的方式,把数据库结构及数据的变更以脚本(changelog)的形式进行版本控制、执行和回滚。

目录
  1. Liquibase 是一个开源的数据库变更管理(schema migration)工具,它通过“声明式”的方式,把数据库结构及数据的变更以脚本(changelog)的形式进行版本控制、执行和回滚。它的核心思想是把数据库的 DDL/DML 也当作“代码”来管理,与应用程序源码一起在版本控制系统中维护,保证多环境(开发/测试/生产)数据库结构的一致性和可追溯性。
  2. 一、Liquibase 有什么用
  3. 二、Liquibase 怎么用
  4. 1. 添加依赖

Liquibase 是一个开源的数据库变更管理(schema migration)工具,它通过“声明式”的方式,把数据库结构及数据的变更以脚本(changelog)的形式进行版本控制、执行和回滚。它的核心思想是把数据库的 DDL/DML 也当作“代码”来管理,与应用程序源码一起在版本控制系统中维护,保证多环境(开发/测试/生产)数据库结构的一致性和可追溯性。#

一、Liquibase 有什么用#

  1. 版本化管理数据库变更
    • 将所有的建表、改表、加索引、插入基础数据等操作以 changeSet 的形式记录在 XML/YAML/JSON/SQL 文件中,和应用代码一起提交。
  2. 自动化执行与环境一致性
    • 在 CI/CD 流水线中自动执行 liquibase update,确保各个环境(本地、测试、预发、生产)的数据库能够同步到相同的版本。
  3. 支持回滚(Rollback)
    • 每个 changeSet 都可以定义对应的 rollback 语句,出现问题时可以方便地回滚到上一个稳定版本。
  4. 多数据库兼容
    • 支持 MySQL、PostgreSQL、Oracle、SQL Server、DB2、H2 等主流数据库,无需针对不同数据库写不同脚本。
  5. 可视化和状态审计
    • 提供命令 statushistorydiff 等,实时查看已执行、未执行的变更,以及与指定基线或其他数据库的差异。

二、Liquibase 怎么用#

下面以最常见的 XML 格式为例说明基本流程。

1. 添加依赖#

  • Maven
org.liquibase liquibase-core 4.18.0 ``` - **Gradle** ```groovy implementation "org.liquibase:liquibase-core:4.18.0" ``` ### 2. 编写 Changelog 文件 - 在项目资源目录下(如 `src/main/resources/db/changelog/db.changelog-master.xml`)创建主 changelog: ```xml
<!-- 引入子 changelog -->
<include file="db/changelog/001-create-table.xml"/>
<include file="db/changelog/002-add-index.xml"/>
<!-- … -->
``` - 每个子文件(如 `001-create-table.xml`): ```xml
``` ### 3. 配置数据库连接 在命令行执行或通过代码/配置文件指定: ```plain text # application.properties(Spring Boot) spring.liquibase.url=jdbc:mysql://localhost:3306/mydb spring.liquibase.user=root spring.liquibase.password=123456 spring.liquibase.change-log=classpath:db/changelog/db.changelog-master.xml ``` ### 4. 执行变更 - **命令行** ```shell liquibase --changeLogFile=db/changelog/db.changelog-master.xml \ --url=jdbc:mysql://localhost:3306/mydb \ --username=root \ --password=123456 \ update ``` - **Maven 插件** ```shell mvn liquibase:update ``` - **Spring Boot 自动执行** 应用启动时会自动扫描并执行未应用的 `changeSet`。 ### 5. 回滚变更 - 回滚到指定标签: ```shell liquibase rollback my_tag ``` - 回滚最近一次 changeSet: ```shell liquibase rollbackCount 1 ``` --- ## 三、什么时候使用 Liquibase - **团队协作、多人开发** 需要多人同时修改数据库结构,通过版本控制避免冲突并追溯历史。 - **多环境部署** 希望在 CI/CD 流水线中自动同步数据库变更,确保测试/生产环境与开发环境一致。 - **需要审计与合规** 对生产环境的 DDL/DML 变更要有完整记录,可随时查看、回溯。 - **跨数据库项目** 同一套变更脚本要在不同类型的数据库上执行(如 MySQL、Oracle)。 - **复杂的回滚需求** 在数据库结构变更出现问题时,需要可靠的回滚方案避免手动恢复的错误。 总之,**任何需要对数据库结构和基础数据做持续、可控、可审计的管理**,都非常适合引入 Liquibase。 # 📎 参考文章