为了账号安全,请及时绑定邮箱和手机立即绑定

Flyway 数据库迁移工具

标签:
SQL Server

目录:
一、什么是Flyway?
二、为什么要用Flyway?
三、Flyway工作原理
四、Gradle 项目如何运行Flyway

一、什么是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。表结构如下

FieldTypeNullKeyDefault
version_rankint(11)NOMULNULL
installed_rankint(11)NOMULNULL
versionvarchar(50)NOPRINULL
descriptionvarchar(200)NO
NULL
typevarchar(20)NO
NULL
scriptvarchar(1000)NO
NULL
checksumint(11)YES
NULL
installed_byvarchar(100)NO
NULL
installed_ontimestampNO
CURRENT_TIMESTAMP
execution_timeint(11)NO
NULL
successtinyint(1)NOMULNULL
  • Migrate
    数据迁移命令,启动项目时会默认执行该命令,用于检测Metadata table 中是否存在未应用的版本,如果存在将会去执行更新。

    webp


  • Clean
    清除掉对应数据库中的所有对象,包括表结构,视图,存储过程,函数以及所有的数据等都会被清除。(在Production环境中慎用)

    webp


  • Info
    打印出来所有历史迁移记录的详细信息

    webp


  • Validate
    验证数是否有新的变更,默认是开启验证的

    webp


  • Undo
    撤消最近应用的版本迁移

    webp


  • Baseline
    实现在非空数据库中新建Metadata表,并把Migrations应用到该数据库。

    webp


  • Repair
    修复Metadata Table,该操作在Metadata Table 出现错误时来进行修复。

    webp


四、Gradle 项目如何运行Flyway

1.)首先引入Flyway插件,有两种方式如下:

  • 方法一:采用buildscript依赖方式。

buildscript {
    ext {
        springBootVersion = '2.0.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("org.flywaydb:flyway-gradle-plugin:4.0.3")
    }
}
apply plugin: 'org.flywaydb.flyway'
  • 方法二:采用DSL方式引用Plugins

plugins {    id "org.flywaydb.flyway" version "4.0.3"}

2.)Gradle中配置Flyway Properties方式

  • 方法一:在build.gradle里的两种写法

flyway {
    url = 'jdbc:mysql://127.0.0.1:3306/flyway'
    user = 'root'
    password ='pass'}
project.ext['flyway.url'] = 'jdbc:mysql://127.0.0.1:3306/flyway'project.ext['flyway.user'] = 'root'project.ext['flyway.password'] = 'pass'

3.)在resources创建 db/migration,并且按格式写sql脚本

  • sql 脚本的命名规范
    SQL 脚本文件及Java 代码类名必须遵循以下命名规则:
    V<version>[_<SEQ>][__description] 版本号的数字间以小数点.或下划线_分隔开,版本号与描述间以连续的两个下划线__分隔开。如`V1_1_0__create_user.sql 。
    Java 类名规约不允许存在小数点,所以Java 类名中版本号的数字间只能以下划线进行分隔。

    webp

4.)运行

运行命令./gradlew flywayMigrate即可完成数据迁移,元数据表中显示信息如下

webp



作者:Mr_欢先生
链接:https://www.jianshu.com/p/ad916cb69115


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消