Flyway客户端使用

Posted shawWey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flyway客户端使用相关的知识,希望对你有一定的参考价值。

一、flyway介绍

  Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command LineJava 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:数据库连接驱动,若出现以下错误,则把对应的数据库驱动放在这个文件夹下 

jarsjreflyway相关java运行环境可以不用操作

libflyway相关jar

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

脚本命名规则: 

 

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

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

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

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

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

2.2 Flyway常用的命令介绍

命令一:Migrate

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

结合客户端理解:

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

 

命令二:Clean

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

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

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

结合客户端理解:

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

 

命令三:Info

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

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

结合客户端理解:

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

 

命令四:Validate

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

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

结合客户端理解:

校验schema_version表的执行情况

 

命令五:Baseline

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

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

结合客户端理解:

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

 

命令六:Repair

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

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

 

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

重新调整已经应用的MigratonsChecksums值,比如:某个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 baseline后脚本最低版本要从2开始。另外注意:由于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客户端使用的主要内容,如果未能解决你的问题,请参考以下文章

Docker Flyway MySQL 8:客户端不支持服务器请求的身份验证协议。考虑升级 MariaDB 客户端

企业分布式微服务云SpringCloud SpringBoot mybatis (十五)Spring Boot中使用Flyway来管理数据库版本

Flyway 无法从 Docker-Container 连接到 MySQL

如何在多架构 MS SQL Server 环境中使用 Flyway?

DDL 和 DML 脚本的分离 - Flyway

flyway - 一种分布式的方式?