Liquibase 使用(全)

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

聊一个数据库脚本的版本工具 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.postgresql.sql" diffChangeLog

changeLogFile 是有命名规则的,命名必须为 *.dbType.format ,如上所示

为测试库打一个标签

liquibase tag v1.0

使用差异升级源库

liquibase --changeLogFile="sqls/changeLogFiledevtest.postgresql.sql" update

升级有问题需要回滚

liquibase 有几种回滚策略,一种是根据标签回滚,回滚次数,和根据日期回滚;有 9 个与之对应的命令

回滚要求对应的 changeLogFile 有回滚标签 ,这个在后面文件格式说

# 按照 changeSet 次数回滚
liquibase  --changeLogFile="sqls/changeLogFiledevtest.postgresql.sql" rollbackCount 1
# 按照标签回滚
liquibase  --changeLogFile="sqls/changeLogFiledevtest.postgresql.sql" rollback v1.0

生成数据库脚本(新环境)

liquibase --changeLogFile="sqls/create_table.mysql.sql"  generateChangeLog

原理

它会在你的目标数据库生成一张表 DATABASECHANGELOG 来管理版本 ,另一个 lock 的是防止多人同时操作数据库加的锁。

文件格式

其实各种文件格式使用生成数据库脚本就可以看到格式了,照着写就行

sql 文件格式

--liquibase formatted sql

--changeset <author>:<version> 
sqls

--rollback rollback sqls 

--comment: 注释都有特殊含义了,所以注释要这样加

详情见官网 sql 文件格式

XML 文件格式

xml 比 sql 更加可控,它可以加一个预判断条件,来判断这个后面的 changeSet 要不要执行,但相应的就必须照它的语法来写语句了,没 sql 方便了,还好提供了 xsd

<preConditions>
    <runningAs username="liquibase"/>
</preConditions>

<!-- 版本 1 的修改-->
<changeSet id="1" author="sanri">
    <addColumn tableName="person">
        <column name="username" type="varchar(8)"/>
    </addColumn>
</changeSet>

见官网 XML 文件格式

json 和 yaml 就不说了,更加不好控

使用构建工具

前面说了,我们也可以使用 maven 来执行这些操作,引入 maven 的一个插件就行

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.6.3</version>
    <configuration>
                    <!--指定执行主文件 -->
<!--                    <changeLogFile>${basedir}/src/main/resources/liquibase/master_changelog.xml</changeLogFile>-->
<!--                    <diffChangeLogFile>${basedir}/src/main/resources/liquibase/changelog/${maven.build.timestamp}_changelog.xml</diffChangeLogFile>-->
<!--                    <outputChangeLogFile>${basedir}/src/main/resources/liquibase/changelog/changelog_original.xml</outputChangeLogFile>-->

                   <propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile>

                    <dropFirst>false</dropFirst>
                    <verbose>true</verbose>
                    <logging>debug</logging>
                    <!-- 是否需要弹出确认框 -->
                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                    <!--输出文件的编码 -->
                    <outputFileEncoding>UTF-8</outputFileEncoding>
                    <!--执行的时候是否显示详细的参数信息 -->
                    <verbose>true</verbose>
                    <!--是否每次都重新加载properties -->
                    <propertyFileWillOverride>true</propertyFileWillOverride>
                    <rollbackTag>${project.version}</rollbackTag>
                    <tag>${project.version}</tag>
                </configuration>
</plugin>

相应的命令做成了目标(goal),使用 -Dkey=value 来指定参数,如

# 执行更新 sql 
mvn liquibase:update -DchangeLogFile="file"
# 打标签,这个版本号在插件中配置成项目版本了
mvn liquibase:tag 
# 将当前库导出表结构
mvn liquibase:generateChangeLog 

集成进 springboot ,在项目启动的时候执行版本管理

网上都说的这种,感觉这种最不靠谱,自动执行的,万一 sql 有个错误,虽然他是把每个 changeSet 做为一个事务,需要不断的重启项目, jenkins 每次构建很慢的,如果让运维来手动重启又不现实。

集成进 springboot

一点小推广

创作不易,希望可以支持下我的开源软件,及我的小工具,欢迎来 gitee 点星,fork ,提 bug 。

Excel 通用导入导出,支持 Excel 公式
博客地址:https://blog.youkuaiyun.com/sanri1993/article/details/100601578
gitee:https://gitee.com/sanri/sanri-excel-poi

使用模板代码 ,从数据库生成代码 ,及一些项目中经常可以用到的小工具
博客地址:https://blog.youkuaiyun.com/sanri1993/article/details/98664034

### 回答1: Liquibase是一个数据库版本控制工具,可以用来管理数据库变更。下面是Liquibase的简单使用步骤: 1. 创建一个Liquibase项目,可以使用Maven或Gradle等构建工具来创建。 2. 配置Liquibase,包括数据库连接信息、变更日志文件路径等。 3. 创建变更集,可以使用XML、YAML或JSON等格式来定义。 4. 运行Liquibase命令来执行变更集,例如执行更新命令: ``` liquibase update ``` 5. 查看数据库变更记录,可以使用命令: ``` liquibase history ``` 6. 回滚数据库变更,可以使用命令: ``` liquibase rollback <tag> ``` 其中,<tag>是变更集的标签,用于指定回滚到哪个点。 以上是Liquibase的简单使用步骤,更多详细信息请参考官方文档。 ### 回答2: Liquibase是一个开源的数据库版本控制工具,可以帮助开发人员管理数据库的演变过程。它使用XML、YAML或JSON格式的脚本文件来定义数据库结构和数据的变更,从而使数据库的追踪和同步变得更加容易。 Liquibase的简单使用可以分为以下几个步骤: 1. 引入Liquibase依赖:在项目的构建配置文件中添加Liquibase的依赖项,例如在Maven项目中,在pom.xml文件中添加Liquibase相关的依赖。 2. 创建Liquibase配置文件:在项目的根目录下创建一个名为liquibase.properties的文件,并配置数据库连接信息,如数据库驱动、URL、用户名和密码等。 3. 编写变更脚本:创建一个名为changelog.xml的文件,用于定义数据库的结构和数据的变更。可以使用Liquibase提供的各种标签和属性来描述添加、字段、索引、约束、存储过程等操作。 4. 执行变更脚本:使用Liquibase命令行工具或API来执行变更脚本。命令行方式可以通过运行liquibase update命令来应用所有未应用的变更,API方式可以在应用程序启动时通过编程方式来初始化和执行变更脚本。 5. 查看数据库状态:可以使用Liquibase的status命令来查看数据库中已应用和未应用的变更,以及当前数据库的状态信息。 通过上述步骤,我们可以很容易地使用Liquibase来管理数据库的变更。它不仅可以帮助我们追踪数据库结构和数据的变化历史,还能够自动处理数据库的升级和回滚,大大简化了数据库的管理工作,提高了开发人员的工作效率。 ### 回答3: Liquibase是一个流行的开源数据库重构工具,可以帮助开发人员对数据库进行版本控制和管理。 使用Liquibase进行数据库重构的步骤如下: 1. 首先,需要在项目中引入Liquibase的库文件。可以通过将Liquibase的依赖添加到项目的构建文件(如pom.xml)中,或者手动下载并添加到项目中。 2. 然后,在项目的资源文件夹中创建一个Liquibase配置文件(如liquibase.properties、liquibase.yml或liquibase.xml)。配置文件中包含了数据库连接信息、变更集文件路径等配置项。 3. 创建一个变更集文件(如changelog.xml),用于存储数据库的变更历史。可以通过添加与数据库相关的标签(如创建、修改表结构、插入数据等)来定义具体的变更操作。 4. 运行Liquibase命令行工具或使用代码方式启动Liquibase,执行变更集文件中的变更操作。Liquibase会根据变更集文件中定义的变更操作,自动检测数据库的当前状态,并将其与变更集文件中的期望状态进行比对,然后执行必要的变更操作以使数据库达到期望状态。 5. 可以使用Liquibase提供的其他功能,如回滚变更、生成数据库文档等。 总结来说,Liquibase简单使用的步骤包括引入Liquibase库文件、创建配置文件、定义变更集文件,然后通过运行Liquibase命令行工具或使用代码方式执行变更操作。Liquibase可以帮助开发人员在多人协作或持续集成环境中轻松管理和控制数据库的变更。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值