Flyway 数据库迁移工具

作者: Mr_欢先生 | 来源:发表于2018-08-25 18:53 被阅读33次

    一、什么是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
    • Migrate
      数据迁移命令,启动项目时会默认执行该命令,用于检测Metadata table 中是否存在未应用的版本,如果存在将会去执行更新。

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

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

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

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

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

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

    备注:
    官方网站:https://flywaydb.org/
    开源地址:https://github.com/flyway/flyway
    学习参考:Flyway-简单的数据库迁移工具

    相关文章

      网友评论

        本文标题:Flyway 数据库迁移工具

        本文链接:https://www.haomeiwen.com/subject/wdsgiftx.html