liquibase学习和使用

4 篇文章 0 订阅

liquibase学习

介绍

Liquibase 是一种数据库结构更改管理解决方案,能够从开发到生产更快、更安全地修订和发布数据库更改。

数据库更新日志和数据库更新日志锁定

部署更改时,Liquibase 会在数据库中创建两个表:DATABASECHANGELOG 和 DATABASECHANGELOGLOCK。
数据库更改日志表跟踪已部署的更改,以便您有记录。Liquibase 将变更日志文件中的变更集与 DATABASECHANGELOG 跟踪表进行比较,并仅部署新的变更集。

DATABASECHANGELOGLOCK 可防止 Liquibase 的多个实例同时更新数据库。该表在部署期间管理对 DATABASECHANGELOG 表的访问,并确保只有一个 Liquibase 实例正在更新数据库。

相关概念

changelog

Liquibase 使用changelog按顺序列出对数据库所做的所有更改。
changelog单个更改单元称为changeset,changeset是 Liquibase 中变化的基本单位。将所有changeset存储在changelog中
不同的文件格式(sql,yaml,xml,json)对changeset的描述是不一样的,只是sql文件格式学习成本最低
changset是由changelog的文件路径和author属性和id属性唯一确认的

changeset的属性
precondition

precondition是添加到changelog或单个changeset的标记,用于根据数据库的状态控制更新的执行。通过precondition,您可以指定changeset的安全性和标准化要求。如果changeset上的precondition失败,Liquibase 不会部署该changeset。不过也可以设置不同的属性控制错误的处理方式。
该属性可以在changeset执行前进行检查。
sql文件格式的changelog只支持sqlCheck,其他文件格式支持的检查会多一些。

sql样例
--liquibase formatted sql
			
--changeset Liquibase User:1
--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM primary_table
--comment: /*comments should go after preCondition. If they are located before the precondition, then Liquibase usually gives error.*/
create table primary_table (  
	id int primary key,
	name varchar(50) not null,
	address1 varchar(50),
	address2 varchar(50),
	city varchar(30)
)
Contexts

使用该属性可以在进行更新数据库时,根据输入的参数对changeset进行过滤;属性值是不区分大小写的字符串。具体的判断逻辑可以参考该链接

sql样例
--changeset bob:1 contextFilter:test
insert into news (id, title) values (1, 'Liquibase 0.8 Released')
Label

使用该属性可以在进行更新数据库时,根据输入的参数对changeset进行过滤;属性值是不区分大小写的字符串。label和contexts的具体的判断逻辑可以参考该链接

sql样例
--liquibase formatted sql

--changeset Liquibase User:1 labels:1.0
create table primary_table (  
   id int primary key,
   name varchar(50) not null,
   address1 varchar(50),
   address2 varchar(50),
   city varchar(30)
)
文件格式
sql样例
/*
 changelog标准开头
 */
--liquibase formatted sql

/*
  changeset标准开头 author:id
 */
--changeset nvoxland:1
/* 设置前置条件属性 */
--preconditions onFail:HALT onError:HALT
/* 设置前置条件sql check,sql格式支支持sqlcheck */
--precondition-sql-check expectedResult:0 SELECT COUNT(*) FROM my_table
create table test1 (
                       id int primary key,
                       name varchar(255)
);
/*
  rollback标准开头
 */
--rollback drop table test1;

--changeset nvoxland:2
insert into test1 (id, name) values (1, ‘name 1);
insert into test1 (id,  name) values (2, ‘name 2);


--changeset nvoxland:3 dbms:oracle
create sequence seq_test;

其他格式用的时候在补充

跟踪表

DATABASECHANGELOGLOCK (数据库更改日志锁定表)

Liquibase 使用 DATABASECHANGELOGLOCK 表来确保一次只运行一个 Liquibase 实例。
当您进行数据库更新时,Liquibase 会从 DATABASECHANGELOG 表中读取数据,以确定需要运行哪些变更集。为了避免并发更新之间的冲突(如果多个开发人员使用相同的数据库实例,或者集群中的多个服务器在启动时自动运行 Liquibase,则可能会发生冲突),当更新当前正在运行时,DATABASECHANGELOGLOCK 表将该列设置为 1。如果您在此期间进行其他更新,Liquibase 会等到锁释放后再运行它。

DATABASECHANGELOG (数据库更新日志表)

Liquibase 使用 DATABASECHANGELOG 表来跟踪运行了哪些变更集。如果数据库中不存在该表,Liquibase 会自动创建一个表。

命令

Liquibase 附带的几个命令,可以帮助迁移和更改数据库。
主要包含start命令、update命令、rollback命令、inspection 命令、tracking 命令、Maintenance 命令、checks 命令、Hub 命令。
Liquibase命令详细

update

该命令将部署changelog文件中尚未部署到数据库的任何更改。
运行该命令时,Liquibase 会按顺序读取changelog文件中的changset,然后将author 和 id的唯一标识符与存储在 DATABASECHANGELOG 表中的值进行比较。

执行情况
  1. 如果唯一标识符不存在,Liquibase 会将changset应用于数据库。

  2. 如果存在唯一标识符,则将changset的 MD5Sum 与数据库中的 MD<>Sum 进行比较。如果它们不同,Liquibase 将生成一条错误消息,声明有人意外更改了changeset。但是,如果将changeset的属性runOnChange or runAlways 设置为True ,Liquibase 将重新应用changeset。

liquibase使用

基于SpringBoot maven集成Liquibase

  1. 打开pom.xml,添加liquibase依赖
<dependency>
   <groupId>org.liquibase</groupId> 
   <artifactId>liquibase-core</artifactId>
</dependency>
  1. 打开spring配置文件application.properties,添加以下配置
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/yourdatabase
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  liquibase:
    #是否启用liquibase
    enabled: true
    change-log: classpath:db/changelog/changelog.yaml
    #changlog生效的上下文
    contexts: dev
    #第一次执行时,是否清空数据库
    drop-first: true
    #changelog生效的标签
    labels: dev
  1. 在resource文件夹下创建db/changelog/changelog.yaml文件,然后填充以下内容
databaseChangeLog:
  - includeAll:
      path: db/changelog/sql/
  1. 然后就可以在db/changelog/sql/文件夹创建你自己的changeset sql格式的文件了;建议文件的命令使用有意义的版本和名字进行命名,比如:01-01-modify-user-table.sql。
  2. sql文件样例
-- liquibase formatted sql

--changeset liming:1 ranOn: 2019-07-01 11:00:00.000000000 +0000
create table user
(
    id   bigint auto_increment
        primary key,
    name varchar(255) not null
);

--changeset liming:2 ranOn: 2019-07-01 11:00:00.000000000 +0000
insert into user (name) values ('liming');

  1. 部署changelog
    6.1.直接启动程序就可以实现改变
    6.2. 在pom.xml中添加liquibase-maven-plugin插件,使用提供的update功能可以实现改变
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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可以帮助开发人员在多人协作或持续集成环境中轻松管理和控制数据库的变更。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值