2019-10-21 flyway初体验

简介

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插件

        
            
                org.flywaydb
                flyway-maven-plugin
                4.0.3
                
                    jdbc:mysql://192.168.33.88:3306/ggg
                    root
                    123456
                
                
                    
                        mysql
                        mysql-connector-java
                        5.1.38
                    
                
            
        
    
约定大于配置,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/

你可能感兴趣的:(2019-10-21 flyway初体验)