文章
技术分享
Liquibase是什么,有什么用,怎么用,在什么时候用?
Liquibase 是一个开源的数据库变更管理(schema migration)工具,它通过“声明式”的方式,把数据库结构及数据的变更以脚本(changelog)的形式进行版本控制、执行和回滚。
目录
- Liquibase 是一个开源的数据库变更管理(schema migration)工具,它通过“声明式”的方式,把数据库结构及数据的变更以脚本(changelog)的形式进行版本控制、执行和回滚。它的核心思想是把数据库的 DDL/DML 也当作“代码”来管理,与应用程序源码一起在版本控制系统中维护,保证多环境(开发/测试/生产)数据库结构的一致性和可追溯性。
- 一、Liquibase 有什么用
- 二、Liquibase 怎么用
- 1. 添加依赖
Liquibase 是一个开源的数据库变更管理(schema migration)工具,它通过“声明式”的方式,把数据库结构及数据的变更以脚本(changelog)的形式进行版本控制、执行和回滚。它的核心思想是把数据库的 DDL/DML 也当作“代码”来管理,与应用程序源码一起在版本控制系统中维护,保证多环境(开发/测试/生产)数据库结构的一致性和可追溯性。#
一、Liquibase 有什么用#
- 版本化管理数据库变更
- 将所有的建表、改表、加索引、插入基础数据等操作以
changeSet 的形式记录在 XML/YAML/JSON/SQL 文件中,和应用代码一起提交。
- 自动化执行与环境一致性
- 在 CI/CD 流水线中自动执行
liquibase update,确保各个环境(本地、测试、预发、生产)的数据库能够同步到相同的版本。
- 支持回滚(Rollback)
- 每个
changeSet 都可以定义对应的 rollback 语句,出现问题时可以方便地回滚到上一个稳定版本。
- 多数据库兼容
- 支持 MySQL、PostgreSQL、Oracle、SQL Server、DB2、H2 等主流数据库,无需针对不同数据库写不同脚本。
- 可视化和状态审计
- 提供命令
status、history、diff 等,实时查看已执行、未执行的变更,以及与指定基线或其他数据库的差异。
二、Liquibase 怎么用#
下面以最常见的 XML 格式为例说明基本流程。
1. 添加依赖#
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。
# 📎 参考文章