一、flyway介绍

  Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。

  Flyway主要基于6种基本命令:Migrate, Clean, Info, Validate, Baseline and Repair。

  目前支持的数据库主要有:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL(including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL(including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix.

二、客户端使用说明

2.1客户端相关文件介绍

解压flyway-commandline-4.1.2-windows-x64.zip打开flyway-4.1.2目录

conf:主要存放一些数据库的配置文件,常见的配置有

flyway.url=jdbc:oracle:thin:@192.168.10.222:1521:orcl    ----数据库url+数据库名

flyway.user=gams0308    ----数据库用户名

flyway.password=bs       ----数据库密码

drivers:数据库连接驱动,若出现以下错误,则把对应的数据库驱动放在这个文件夹下

jars和jre是flyway相关java运行环境可以不用操作

lib是flyway相关jar包

重点关注sql文件夹,这里头存放flyway要执行的脚本。

脚本命名规则:

1、前缀(可配置,默认值:V)

2、版本(以点或下划线区分开来)

3、分隔符(两个下划线)

4、描述(下划线或空格分开)

5、后缀(可配置,默认情况下:SQL)

2.2 Flyway常用的命令介绍

命令一:Migrate

Migrate是指把数据库Schema迁移到最新版本,是Flyway工作流的核心功能,Flyway在Migrate时会检查Metadata(元数据)表,如果不存在会创建Metadata表,Metadata表主要用于记录版本变更历史以及Checksum之类的。

结合客户端理解:

执行sql文件夹中未执行的sql,将sql版本更到最新。

命令二:Clean

Clean相对比较容易理解,即清除掉对应数据库Schema中的所有对象,包括表结构,视图,存储过程,函数以及所有的数据等都会被清除。

Clean操作在开发和测试阶段是非常有用的,它能够帮助快速有效地更新和重新生成数据库表结构,

特别注意:在生产环境上禁止使用该命令,使用不当将删除所有生产数据表!

结合客户端理解:

删除制定数据库里头的所有表。

命令三:Info

Info用于打印所有Migrations的详细和状态信息,其实也是通过Metadata表和Migrations完成的,下图很好地示意了Info打印出来的信息。

Info能够帮助快速定位当前的数据库版本,以及查看执行成功和失败的Migrations。

结合客户端理解:

输入所有flyway执行过的信息。

命令四:Validate

Validate是指验证已经Apply的Migrations是否有变更,Flyway是默认是开启验证的。

Validate原理是对比Metadata表与本地Migrations的Checksum值,如果值相同则验证通过,否则验证失败,从而可以防止对已经Apply到数据库的本地Migrations的无意修改。

结合客户端理解:

校验schema_version表的执行情况

命令五:Baseline

Baseline针对已经存在Schema结构的数据库的一种解决方案,即实现在非空数据库中新建Metadata表,并把Migrations应用到该数据库。

Baseline可以应用到特定的版本,这样在已有表结构的数据库中也可以实现添加Metadata表,从而利用Flyway进行新Migrations的管理了。

结合客户端理解:

设定schema_version表的基线执行版本。

命令六:Repair

Repair操作能够修复Metadata表,该操作在Metadata表出现错误时是非常有用的。

Repair会修复Metadata表的错误,通常有两种用途:

移除失败的Migration记录,该问题只是针对不支持DDL事务的数据库。

重新调整已经应用的Migratons的Checksums值,比如:某个Migratinon已经被应用,但本地进行了修改,又期望重新应用并调整Checksum值,不过尽量不要这样操作,否则可能造成其它环境失败。

结合客户端理解:

删除schema_version表里头失败的记录。

三、常用操作

3.1 首先配置cof文件夹里头的flyway.conf文件,制定数据库以及用户名密码:

例如:

3.2 将要执行sql放到sql文件夹中,若脚本有执行顺序的话,先执行的命名排前。

3.3 右键shift+鼠标右键,打开控制台。

3.4 flyway migrate执行数据库更新操作。

第一次执行flyway migrate可能会报以下错误

  数据要先指定基线版本,先执行flyway baseline,这时候在对应的数据库里头创建一张版本更新表:schema_version,然后再执行flyway migrate,开始。另外注意:由于flyway创建schema_version表时候,多了””,所以查询数据库要加””,例如:select t.* from "schema_version" t;

3.5 flyway info输出操作记录信息。

3.6 若执行脚本报错,比如数据表id要求唯一,这时候执行flyway migrate会报错。

schema_version表里头最新的一个脚本的success字段就会为0,代表失败。

修改对应的脚本,flyway repair删除错误记录,然后再执行flyway migrate就可以了。

3.7 flyway baseline设定flyway基线。

在未执行flyway migrate之前,可以执行该命令,否则执行报错。 

Flyway客户端使用的更多相关文章

  1. 完整的房间类游戏解决方案AiJ

    介绍 AiJ是一套完整的房间类游戏解决方案,支持无限水平扩展来满足更大的人数承载,并且提供了良好的调试接口. 主要模块包括: 注册中心 大厅服务 游戏服务 亲友圈服务 运营管理系统 CocosCrea ...

  2. 数据库版本管理工具--Flyway的使用

    软件开发正常流程是:开发环境 ---> 测试环境  ----> 产环境 在开发过程中经常需要变更数据库: 表结构变更. 基础数据变更. 最直接的做法是:用客户端连上数据库直接修改. 依次修 ...

  3. Spring Boot教程(四十)使用Flyway来管理数据库版本

    在上面的使用JdbcTemplate一文中,主要通过spring提供的JdbcTemplate实现对用户表的增删改查操作.在实现这个例子的时候,我们事先在MySQL中创建了用户表.创建表的过程我们在实 ...

  4. Flyway:数据库版本迁移工具的介绍

    目录 Flyway介绍 Flyway的工作模式 Flyway的使用场景 命令行 使用Maven或Gradle插件 migrate clean info validate baseline Java A ...

  5. Spring Boot 2.x基础教程:使用Flyway管理数据库版本

    之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的JdbcTemplate.Spring Data JPA以及我们国内最常用的MyBatis.同时, ...

  6. Flyway:Spring Boot中使用Flyway来管理数据库版本

    Flyway简介 Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate.clean.info.validate.baseline.repair等命令.它支持SQL(PL/ ...

  7. flyway的使用

    1.使用它之前先要了解一些概念: 版本:对数据库的每一次变更可称为一个版本. 迁移:Flyway把数据库结构从一个版本更新到另一个版本叫做迁移. 可用的迁移:Flyway的文件系统识别出来的迁移版本. ...

  8. 【原创分享·支付宝支付】HBuilder打包APP调用支付宝客户端支付

    前言 最近有点空余时间,所以,就研究了一下APP支付.前面很早就搞完APP的微信支付了,但是由于时间上和应用上的情况,支付宝一直没空去研究.然后等我空了的时候,发现支付宝居然升级了支付逻辑,虽然目前还 ...

  9. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

随机推荐

  1. Linux系统中的screen命令基本使用教程

    作为linux服务器管理员,经常要使用ssh登陆到远程linux机器上做一些耗时的操作. 也许你遇到过使用telnet或SSH远程登录linux,运行一些程序.如果这些程序需要运行很长时间(几个小时) ...

  2. fabric查看本地与远程主机信息

    #!/usr/bin/pythonfrom fabric.api import *env.user='root'env.hosts=['172.10.224.183','172.10.224.132' ...

  3. Mybatis配置插入数据返回主键ID

    需要在insert方法中添加 <insert id="insertSelective" parameterType="com.midou.ott.model.MDA ...

  4. DPDK l3fwd

    l3fwd负责三层转发,比l2fwd要复杂点. /*- * BSD LICENSE * * Copyright(c) 2010-2014 Intel Corporation. All rights r ...

  5. Git如何进行分支管理?

    Git如何进行分支管理?     1.创建分支     创建分支很简单:git branch <分支名>     2.切换分支     git checkout <分支名>   ...

  6. 支付宝app支付java后台流程、原理分析(含nei wang chuan tou)

    java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写     一.流程步骤         1.执行流程           当手机端app(就是你公司开发的app)在支付 ...

  7. iOS CoreData (二) 版本升级和数据库迁移

    前言:最近ChinaDaily项目需要迭代一个新版本,在这个版本中CoreData数据库模型上有新增表.实体字段的增加,那么在用户覆盖安装程序时就必须要进行CoreData数据库的版本升级和旧数据迁移 ...

  8. LightOJ - 1341唯一分解定理

    唯一分解定理 先分解面积,然后除2,再减去面积%长度==0的情况,注意毯子不能是正方形 #include<map> #include<set> #include<cmat ...

  9. 解决JQUERY在IE8,7,6下将字符串转成XML对象时产生的BUG

    js 定义一个xml 对象,var data = "<Root><DataRow Id=\"1234\"/></Root>" ...

  10. 如何退出telnet

    ctrl键+ENter键 然后输入 进入telnet 命令 quit