简介
flyway是用java编写的开源的数据库版本管理工具,或者说是数据库结构变更工具,旨在帮助运维更容易的管理数据库演进过程中的各个版本。他的源码在github上面。
在日常的开发中,大部分的人都听说过,代码的版本管理,git,svn等,很少听说过数据库的版本管理工具。在数据库较小的情况下,人工操作比较有把握,直接人工做结构的变迁。可是当数据库结构复杂的(生产,测试,开发,预发布),人工处理就显得力不从心了。在大型项目建立之初,为了方便,可以直接的手动修改,但是当项目整体已经完成,并且稳定下来,就要逐步的完善研发流程和规范,避免因为这些小事影响了项目。
环境准备
idea,maven,jdk,mysql的docker容器
注意点
flyway有多种使用的方式,有java代码,maven插件等,这里我采用的是maven插件的方式。
启动mysql的docker容器
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
连接mysql容器里面的mysql,创建数据库testflyway:create database testflyway;
方式1 直接连接:
docker exec -it mysql /bin/bash mysql -uroot -p123456
方式2 进入mysql容器在连接:
docker exec -it mysql /bin/bash
mysql -uroot -p123456
maven插件
<build>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>4.0.3</version>
<configuration>
<url>jdbc:mysql://192.168.33.88:3306/ggg</url>
<user>root</user>
<password>123456</password>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
约定大于配置,flyway默认文件夹在resource/db/migration,在里面配置版本数据迁移文件,注意文件名是有严格要求的。
image.png执行mvn flyway:migrate。 flyway会自动的找到数据迁移文件执行的。
这个时候去数据库里面查看就可以看到本来空空的testflyway数据库里面存在了两张表PERSON和schema_version,其中PERSON是flyway按照文件创建的,schema_version是flyway进行版本控制的数据表。
这里有注意一件事,要使用flyway要区分显示是不是初始项目的,(初始项目,也就是只建立了数据库但是数据库里面没有任何表),当初始项目的时候,可以直接使用上面的这这种方式。
还有一般使用flyway做数据表结构的版本控制,但是也是可以做数据的版本控制的,但是这个并不是特别的有优势,因为数据是一直变换的,flymay对数据的版本控制并不会有太大的作用,所以,一般用作表结构的版本控制。
每次执行mvn flyway:migrate的时候,其实flyway都是会到db/migration文件夹下面查找所有的数据迁移文件的,但是只会执行版本号大于数据库里面的schem_version版本的文件的。其他小于等于的文件会自动的忽略的
也就是说,每当需要发展数据库的时候,无论是结构ddl还是数据dml,只需要创建版本号高于当前的版本的新的迁移就可以了,当下一次执行flyway的时候,会自动的相应的升级数据库的。
项目已经有历史数据
这个时候,不可以直接的使用mvn flyway:migrate,要使用mvn flyway:baseline先由flyway构建最初的v1版本的数据迁移,然后在执行mvn flyway:migrate来执行数据迁移。
参考文章:
https://blog.csdn.net/u010963948/article/details/77801431
https://juejin.im/entry/5c948530f265da60ce37a62d
http://qinghua.github.io/flyway/
网友评论