如何使用Liquibase进行数据库模式管理

637 阅读2分钟

Liquibase

阅读时间: 2 分钟

什么是Liquibase?

首先,Liquibase是一个开源的数据库模式变更管理解决方案,它使你能够轻松地管理你的数据库变更的修订。

我们可以在哪里使用Liquibase?

  • 数据库模式变更的CD
  • 模式变更的版本控制
  • 将数据库和应用程序的变更一起部署,使它们始终保持同步。

Liquibase的概念

变更日志

  • 它包含了需要在数据库中进行的顺序性修改。

  • Changelogs支持fomats。 sql、xml、json、yaml

  • 常用的可用属性

  • 前提条件

    • 用来检查数据的真实性。
  • 变更集

    • 这是一个需要通过Liquibase在DataBase中执行的变更。
  • 包括

    • 含有改变集的附加文件,包括在主变更日志中。
  • 例子

--liquibase formatted sql
				
--changeset author_name:id1
create table example (  
    id int primary key,
    name varchar(255)  
);  
--rollback drop table example; 

--changeset author_nmae:id2 
insert into example (id, name) values (1, ‘name 1′);
insert into example (id,  name) values (2, ‘name 2′);  


追踪表

总的来说,Liquibase 创建并使用两个表来跟踪 changelogfile 中的更改集,并使用锁来防止一次进行多次更新。

数据库变更日志

此外,它被用来比较和部署 changelog 文件中的变更集。

对于表中的属性列表。

docs.liquibase.com/concepts/tr…

数据库变更日志锁

它可以防止Liquibase的多个实例同时更新数据库。

对于表中的属性列表。

docs.liquibase.com/concepts/tr…

数据库连接

另外,Liquibase同时支持SQL和NoSQL数据库

关于支持的数据库的列表。

https://docs.liquibase.com/install/supported-databases.html

Liquibase命令

更新。

更新命令将 Changelog 中定义的 SQL 更改更新到现有数据库中。

欲了解更多信息。

docs.liquibase.com/change-type…

例子。

变更日志文件内容

-- changeset liquibaseuser:1
UPDATE  liquibase.person  SET  address  =  'address value'  WHERE  name='Bob';
liquibase  --changeLogFile "<filePath>" --url <DataBaseUrl> --username "<username>" --password "<password>" update

回滚

rollback 命令会回滚根据指定标签对数据库所做的更改。

欲了解更多信息。

docs.liquibase.com/commands/ro…

例子

更改日志文件内容

-- changeset liquibaseuser:1
create table Details1 ( id int primary key, name varchar(255) );
-- rollback drop table Details1;
liquibase --changeLogFile="filePath" --url <DataBaseUrl> --username "<username>" --password "<password>" rollback <tag>

快照

snapshot 命令捕获了数据库的当前状态。

关于更多信息。

快照仅以JSON或YAML格式出现

docs.liquibase.com/commands/sn…

例子

liquibase --output-file=mySnapshot.json --url <DataBaseUrl> --username "<username>" --password "<password>" --snapshot --snapshotFormat=json

差异

Liquibase中的diff 命令允许你将相同类型或不同类型的两个数据库相互比较。

欲了解更多信息。

docs.liquibase.com/commands/di…

例子

liquibase diff
--format=json
--url="<SOURCE_DATABSE URL>"
--username=<SOURCE_DATABASE USERNAME>
--password=<SOURCE_DATABASE PASSWORD>
--referenceUrl="<REFERENCE_DATABASE URL>"
--referenceUsername=<REFERENCE_DATABASE USERNAME>
--referencePassword=<REFERENCE_DATABASE PASSWORD>

总结

Liquibase提供了丰富的cli选项和对docker镜像的支持。因此,我们创建了CI/CD管道,将数据库作为版本控制系统的代码来管理。