一、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之前,可以执行该命令,否则执行报错。