SpringBoot 数据库版本管理

方案

  1. Flyway
  1. liquibase
  1. SpringDataJpa
  1. mybatis-enhance-actable
  1. mybatisPlus 自动维护DDL
  1. mybatis-plus-ext
  1. 飞书流程审核处理(存储 DDL 通过流程,DBA 执行后发布)
  1. DMS 协同管理
  1. Mybatis-Mate表结构自动维护(收费)
 

flyway

数据库版本管理主要是对DDL定义版本管理
不是对数据版本管理,如果需要这种功能,还是要看一点阿里云DMS提供的协同工具实现

一、什么是Flyway?

Flyway是一款开源的数据库版本管理工具,主要是用于数据库版本管理并且跟踪数据库变更。
主要特性有:
  • 普通SQL:纯SQL脚本(包括占位符替换)没有专有的XML格式,没有锁定。
  • 无限制:使用Java 代码来进行一些高级数据操作
  • 零依赖:只需运行在Java6(及以上)和数据库所需的JDBC驱动
  • 约定优于配置:迁移时,自动查找系统文件和类路径中的SQL文件或Java类
  • 高可靠性:在集群环境下进行数据库升级是安全可靠的
  • 自动迁移:使用Fly提供的API,让应用启动和迁移同时工作
  • 快速失败:损坏的数据库或失败的迁移可以防止应用程序启动
  • 数据库清理:在一个数据库中删除所有的表、视图、触发器,而不是删除数据库本身

二、为什么要用Flyway?

  • 实际开发的时候,不同的开发人员在开发产品时,都有可能更新数据库,当开发人员完成了对数据库更的SQL脚本后,如何快速地在其他开发者机器上同步?并且如何在测试服务器上快速同步等等问题
  • 当升级失败时(比如在升级过程中出现网络连接失败),我们应当支持对失败进行修复。
上面遇到的问题可以通过Flyway进行解决:
  • Flyway 可以实现自动化的数据库版本管理
  • Flyway 在开发过程中能及时更新数据库的变化
  • 更新失败 Flyway 还可以对失败进行修复
  • Flyway 能够记录数据库版本更新记录

三、Flyway工作原理

Flyway对于数据库的版本管理主要是由名为SCHEMA_VERSION 的 Metadata(元数据)表和7种命令完成。元数据表则是用来记录所有版本演化和状态。 官网文档
  • Metadata Table
Flyway中最核心的,用于记录所有版本演化和状态的Metadata Table,在初始化Flyway时会创建名为SCHEMA_VERSION的 Metadata Table。表结构如下
Field
Type
Null
Key
Default
version_rank
int(11)
NO
MUL
NULL
installed_rank
int(11)
NO
MUL
NULL
version
varchar(50)
NO
PRI
NULL
description
varchar(200)
NO
NULL
type
varchar(20)
NO
NULL
script
varchar(1000)
NO
NULL
checksum
int(11)
YES
NULL
installed_by
varchar(100)
NO
NULL
installed_on
timestamp
NO
CURRENT_TIMESTAMP
execution_time
int(11)
NO
NULL
success
tinyint(1)
NO
MUL
NULL

四、Migration迁移操作

Flyway不限定脚本里面的内容,但是对脚本文件的名称有一定的要求,基于约定由于配置的原则,不同的类型通过文件命名方式进行区分 版本迁移(Versioned Migrations)以V开头,只会执行一次; 回退迁移(Undo Migrations)以U开头,执行一旦发生破坏性更改,就会很麻烦,项目中一般不用; 可重复执行迁移(Repeatable Migrations)以R开头,每次修改后都会重新执行。
notion image

Mysql SpringBoot

PostgrelSQL

 

参考文献

flyway
flywayUpdated Mar 24, 2025
Flyway
mahuanfyUpdated Feb 7, 2025

No database found to handle or Unsupported Database

📢 Modular Flyway V10 (No database found to handle or Unsupported Database)
Updated Dec 2, 2024
Loading...
文章列表
王小扬博客
云原生
Git
Elasticsearch
Apollo
产品
Think
生活技巧
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP
AI