flyway
什么是flyway
flyway是一个数据库迁移工具.使用version来记录每一次脚本的执行.
使用场景
主要是用来记录每次迭代的版本sql的表结构的变动.在部署某个版本时,能够快找到这个版本对应的sql,避免出现表结构的错误
如图
例如
v0.1版本有v1-v6的sql
v0.2版本有v7-v17的sql
如果用户选择部署v0.1的版本,那么就能找到对应的初始化sql(v1-v6)
如果用户选择部署v0.2的版本,那么就能找到对应的初始化sql(v1-v17)
如果用户选择从0.1升级到0.2版本,那么就能找到对应的初始化sql(v7-v17)
如何使用
flyway提供了以下方式来使用
如果不想入侵到代码中.可以使用
flyway command line
工具.这里主要以command line
版本号为5.1.4
做例子.
下载地址
官网地址
目录结构
解压的目录如下
如何使用
配置
- 进入
conf
- 编辑
flyway.conf
- 修改如下配置
- flyway.driver= com.mysql.jdbc.Driver
- flyway.user= root
(注:自己的数据库用户名)
- flyway.password= root
(注:自己的数据库密码)
- flyway.url= jdbc:mysql://ip:port/xxx?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
(注:自己的数据库url)
放入需要执行的脚本
- 把脚本放入sql目录下
能够执行sql目录及其目录以下的所有脚本
如何执行
-
找到目录下的 flyway命令
输入命令
flyway info
.检查是否连接成功
- 输入命令
flyway migrate
执行sql操作
$ sh flyway migrate
Flyway Community Edition 5.1.4 by Boxfuse
Database: jdbc:mysql://ip:port/xxx (MySQL 5.7)
Successfully validated 363 migrations (execution time 00:04.195s)
Current version of schema `xxx`: 0000367
Schema `xx` is up to date. No migration necessary.
最后数据有张表默认是flyway_schema_history
记录了flyway的version.
如何在已存在的库中使用
如果库中已经存在数据,是无法直接使用flyway命令的
- 执行
flyway baseline
命令.然后再根据上面的步骤执行
flyway的运行原理
主要是通过对比
flyway_schema_history
表中version
与checksum
.来判断文件是否存在与被修改过.来执行版本控制的.