添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

数据库变更管理:Liquibase or Flyway

2023-07-05 0 浏览 #数据库变更 #数据库管理
2023-07-05 0 浏览
#数据库变更 #数据库管理
研发过程中经常涉及到数据库变更,对表结构的修复及对数据的修改,为了保证各环境都能正确的进行变更,我们可能需要维护一个数据库升级文档来保存这些记录,有需要升级的环境按文档进行升级。

前言

研发过程中经常涉及到数据库变更,对表结构的修复及对数据的修改,为了保证各环境都能正确的进行变更,我们可能需要维护一个数据库升级文档来保存这些记录,有需要升级的环境按文档进行升级。

这样手工维护有几个缺点:

1. 无法保证每个环境都按要求执行

2. 遇到问题不一定有相对的回滚语句

3. 无法自动化

为了解决这些问题,我们进行了一些调研,主要调研对象是 Liquibase Flyway ,我们希望通过数据库版本管理工具实现以下几个目标:

1. 数据库升级

2. 数据库回滚

3. 版本标记

Liquibase 还是 Flyway

Flyway Liquibase 都支持专业数据库重构和版本控制所需的所有功能,因此您将始终知道要处理的数据库模式的版本以及它是否与软件版本匹配。两种工具都集成在 Maven Gradle 构建脚本中以及 Spring Boot 生态系统中,因此您可以完全自动化数据库重构。

Flyway 使用 SQL 定义数据库更改,因此您可以定制 SQL 脚本,使其与基础数据库技术(例如 Oracle PostgreSQL )良好地配合使用。另一方面,使用 Liquibase ,您可以通过使用 XML YAML JSON 来定义数据库更改来引入抽象层。因此, Liquibase 更适合在具有不同基础数据库技术的不同环境中安装的软件产品中使用。

Flyway

数据库的变更可以用 SQL 或者 Java 来记录, Flyway 通过下面的步骤实现数据库变更:

1. Flyway 先在数据库中检查自己的元数据表(默认为 SCHEMA_VERSION )是否存在,如果没有,则创建一个;

2. 检查 classpath 中所有的变更;

3. 对比变更和自己的表,如果变更的版本低于或等于当前版本,不做任何变动;

4. 否则,变更会按从低到高排序,并依次执行;

5. 执行完,在 SCHEMA_VERSION 做相应的记录

Liquibase

工作方式与 Flyway 非常类似,但是 Liquibase 稍微复杂点,这点后续会单独介绍。

对比

两者的基本功能其实都差不多:

都是 Java 开发的开源数据库变更管理工具

支持大部分的数据库

Maven/Gradle 无缝集成

Spring 无缝集成

非常类似的变更实现方式

复杂变更如果 SQL 不能满足的话,都可以用 Java 代码实现

较大区别是 Flyway 的变更以纯 SQL 为脚本,简单直接; Liquibase 比较厚重,当然花样也比较多,包括:

可指定不同的 profile

具有通用的变更操作支持不同的数据库,如 createTable

Liquibase 开源版本支持 diff 模式,而此特性 Flyway 必须用商业版

Liquibase 开源版本支持回滚 rollback ,而此特性 Flyway 必须用商业版, Liquibase 的付费版本据说对不同种类的回滚有更复杂的支持。

两者指定变更执行顺序的方法不同, Flyway 通过固定的文件名格式来确定顺序,而 Liquibase 就是通过给定文件的顺序来执行,所以开发人员还要遵守好命名规则,例如按照日期 / 时间顺序命名

如果您想完全控制 SQL Flyway 是首选工具,因为您可以使用完全定制的 SQL 甚至 Java 代码来更改数据库。多种数据源的情况下使用 Liquibase 会更加合适,不需要维护多种数据库脚本,和学习多种数据库语言, Liquibase 对于大型项目更加友好。

综上所述,我们在项目中选择 Liquibae 。接下来简单来认识一下 Liquibase

Liquibase

介绍

Liquibase 是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,通过执行 schema 类型的文件来达到迁移。其优点主要有以下:

支持几乎所有主流的数据库,如 MySQL, PostgreSQL, Oracle, Sql Server, DB2 等;

支持多开发者的协作维护;

日志文件支持多种格式,如 XML, YAML, JSON, SQL 等;

支持多种运行方式,如命令行、 Spring 集成、 Maven 插件、 Gradle 插件等。

liquibase 官方文档地址: www.liquibase.org/documentati

本地安装

根据自己的操作系统下载对应的二进制包,下载地址: www.liquibase.org/dow...

我这里下载的是 Mac 版本的压缩包,然后在本地解压,解压包存放位置为:

/Library/liquibase-4.4.3

sudo vi ~/.bash_profile ,修改环境变量配置文件:

export   PATH="/Library/liquibase-4.4.3:$PATH"

然后 source ~/.bash_profile ,使配置文件生效。

最后执行下述命令,验证是否安装成功。

% liquibase --version
######################################################   _     _             _ _                      ####  | |   (_)           (_) |                     ####  | |    _  __ _ _   _ _| |__   __ _ ___  ___   ####  | |   | |/ _` | | | | | '_ \ / _` / __|/ _ \  ####  | |___| | (_| | |_| | | |_) | (_| \__ \  __/  ####  \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___|  ####              | |                               ####              |_|                               ####                                                ## ##  Get documentation at docs.liquibase.com       ####  Get certified courses at learn.liquibase.com  ## ##  Free schema change activity reports at        ####      https://hub.liquibase.com                 ####                                                ######################################################
Starting Liquibase at 10:06:20 (version 4.4.3 #53 built at 2021-08-05 18:32+0000)