Liquibase 使用(全)

Liquibase是一款用于数据库脚本版本管理的工具,适用于开发和测试环境,能有效降低数据库变更带来的沟通成本和风险。它支持多种文件格式,如XML、YAML、JSON和SQL,可通过命令行或构建工具进行操作,实现数据库版本的比较、更新和回滚。
该文章已生成可运行项目,

聊一个数据库脚本的版本工具 Liquibase,官网在这里 ,初次看到,挺神奇的,数据库脚本也可以有版本管理,同类型的工具还有 flyway 。

开发过程经常会有表结构和变更,让运维来维护的话,通常会有很大的沟通成本,有时在开发方案有问题的时候,提测失败整个项目需要回滚,代码回滚起来是很容易的,通常有备份,但数据库的话就要人工来逐行分析并写出回滚语句,Liquibase 这时候就有用了。

Liquibase 适用场景感觉不多,所以可能有人没听过它的名头; 首先这种自动执行的家伙肯定是不适合于生产环境的,然后在数据量大的时候是不可能用数据库自带的 alter 语句的,一般都是手动创建另一张表,然后用 sql 语句将数据批量复制过去,再者使用容器化也比它好,个人觉得它一般用于开发和测试环境,比较厉害的一个功能是可以比较两个库的差异然后生成补丁包,上线时可以这么玩。

这篇文章说得不错,我是在这篇基本上写的

核心概念

首先它是用于管理数据库版本的,所以就会有这些概念:版本号,管理的数据,差异比较,版本回滚

它的版本号由开发人员来维护,使用 author + id

管理的数据最小单元为 changeSet ,这个 changeSet 看官网说是可以用 xml,yaml,json,sql 来编写

提交数据,比较差异,版本回滚 可以使用命令行 或者 maven ,ant 等构建工具来完成

从命令行开始

看网上说的都是集成自 springboot ,但这种数据库脚本一般公司都是运维在维护,使用命令行是最方便的方式,所以我先说下使用命令行,官网示例

为先为了不每次都要写一大堆参数,可以在 liquibase 根目录加一个 liquibase.properties,用于配置数据库 jar 包,url ,用户名,密码等参数,配置详情

命令格式: liquibase [options] [command] [command parameters]

比较开发库和测试库的差异,并生成升级包

如果要升级哪个,则哪个要做为源,则配置中的 url 不是 referenceUrl,使用如下命令创建升级包

liquibase --changeLogFile="changeLogFiledevtest.postgres
本文章已经生成可运行项目
Liquibase 是一种广泛使用的开源数据库变更管理工具,支持多种数据库类型,如 MySQL、PostgreSQL、Oracle、SQL Server 等。它通过版本控制的方式管理数据库结构变更,确保数据库的可追溯性、可重复性和一致性。 ### 安装 Liquibase 首先,确保系统中已安装 Java(Liquibase 基于 Java 构建),然后从 [Liquibase 官网](https://www.liquibase.org/download) 下载 Liquibase 的压缩包。解压后,将其路径添加到环境变量中,以便在命令行中直接使用。 ### 创建 Liquibase 项目 1. 创建一个项目目录,例如 `liquibase-demo`。 2. 在该目录中创建以下文件: - `changelog.xml`:主变更日志文件,用于组织和调用各个变更集。 - `liquibase.properties`:配置文件,指定数据库连接信息和变更日志文件路径。 #### 示例 `liquibase.properties` 文件内容 ```properties driver: com.mysql.cj.jdbc.Driver classpath: /path/to/mysql-connector-java-8.0.26.jar url: jdbc:mysql://localhost:3306/your_database username: your_username password: your_password changeLogFile: changelog.xml ``` ### 编写变更日志文件 变更日志文件是 Liquibase 的核心,通常以 XML、YAML 或 JSON 格式编写。每个变更集(changeset)代一次数据库变更,可以包含创建、修改列、插入数据等操作。 #### 示例 `changelog.xml` 文件 ```xml <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-4.3.xsd"> <changeSet id="1" author="john"> <createTable tableName="person"> <column name="id" type="int"> <constraints primaryKey="true" nullable="false"/> </column> <column name="name" type="varchar(255)"> <constraints nullable="false"/> </column> <column name="address" type="varchar(255)"/> </createTable> </changeSet> <changeSet id="2" author="john"> <addColumn tableName="person"> <column name="email" type="varchar(255)"> <constraints nullable="false"/> </column> </addColumn> </changeSet> </databaseChangeLog> ``` 在这个示例中,第一个变更集创建了一个名为 `person` 的,包含 `id`、`name` 和 `address` 三个字段;第二个变更集向 `person` 中添加了一个 `email` 字段。 ### 执行 Liquibase 命令 在命令行中进入项目目录,执行以下命令来应用变更: ```bash liquibase update ``` 该命令会根据 `changelog.xml` 文件中的变更集,逐步应用到目标数据库中。Liquibase 会在数据库中自动创建两个:`DATABASECHANGELOG` 和 `DATABASECHANGELOGLOCK`,用于记录已执行的变更集和管理并发访问。 ### 回滚操作 如果需要回滚某个变更集,可以在 `changelog.xml` 文件中添加 `rollback` 元素,定义回滚时的操作。例如: ```xml <changeSet id="3" author="john"> <createTable tableName="temp_table"> <column name="id" type="int"> <constraints primaryKey="true" nullable="false"/> </column> <column name="data" type="varchar(255)"/> </createTable> <rollback> <dropTable tableName="temp_table"/> </rollback> </changeSet> ``` 执行回滚命令: ```bash liquibase rollbackCount 1 ``` 该命令会回滚最近执行的一个变更集。 ### 集成到项目中 Liquibase 可以轻松集成到 Spring Boot、Maven、Gradle 等项目中。以 Spring Boot 为例,只需在 `pom.xml` 中添加 Liquibase 依赖: ```xml <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency> ``` 并在 `application.properties` 中配置 Liquibase: ```properties spring.liquibase.change-log=classpath:db/changelog.xml spring.liquibase.url=jdbc:mysql://localhost:3306/your_database spring.liquibase.user=your_username spring.liquibase.password=your_password ``` 启动应用时,Spring Boot 会自动执行 Liquibase 的变更脚本。 ### 最佳实践 - **版本控制**:将变更日志文件纳入版本控制系统(如 Git),确保每次变更都有记录。 - **测试环境**:在开发环境中频繁使用 Liquibase 进行变更测试,确保变更脚本在生产环境中能够顺利执行。 - **命名规范**:为变更集设置清晰的 `id` 和 `author`,便于追踪和管理。 - **自动化部署**:结合 CI/CD 工具(如 Jenkins、GitLab CI)自动执行 Liquibase 变更,确保数据库与代码同步更新。 通过以上步骤,可以有效地使用 Liquibase 进行数据库变更管理,提升数据库开发的效率和可靠性。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值