Flyway是一款开源的数据库版本管理工具,包含社区版、专业版和企业版,可以独立于应用实现管理并跟踪数据库变更。支持多种配置,包括Java API、Command line、maven 和 gradle。
一、入门
本文使用社区版 Flyway 的maven 插件来迁移数据库,数据库为 MySQL。
1、新建 maven 项目
在 resources 目录下建立 db/migration 目录。

2、修改 pom.xml
添加 Flyway 插件,并配置 mysql 的连接字符串、用户名和密码:
<build>
<plugins>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.0.5</version>
<configuration>
<url>jdbc:mysql://hostname:port#/db_name</url>
<user>username</user>
<password>password</password>
</configuration>
</plugin>
</plugins>
</build>
3、迁移数据库
(1)建立一个空数据库用于测试。
(2)在 db/migration 目录下建立 SQL 脚本 V1__Create_person_table.sql:
create table PERSON (
ID int not null,
NAME varchar(100) not null
);
(3)运行 maven 命令:mvn flyway:migrate,数据库中会建立表 flyway_schema_history 跟踪数据库版本,插入第一次迁移记录,并执行 SQL 脚本。

4、第二次迁移
(1)在 db/migration 目录下建立 SQL 脚本 V2__Add_people.sql:
insert into PERSON (ID, NAME) values (1, 'Axel');
insert into PERSON (ID, NAME) values (2, 'Mr. Foo');
insert into PERSON (ID, NAME) values (3, 'Ms. Bar');
(2)运行 maven 命令:mvn flyway:migrate,flyway_schema_histry 会插入第二条记录,并执行 SQL 脚本:

二、命令
1、Flyway 迁移
(1)带版本的迁移:迁移脚本带版本号,每一次带版本的迁移都有版本号、描述和校验和,并且只能执行一次。典型用于数据表结构变更等。
(2)可重复的迁移:和带版本的迁移不同,它没有版本号,只有描述和校验和,而且可以多次执行。典型用于插入数据等操作。
(3)脚本命名规则:

2、Flyway 命令
- migrate:把数据库迁移到最新版本,迁移是根据
db/migration目录下的脚本顺序执行。 - clean:
清空数据库中的数据,不能在生产环境使用此命令。 - info:打印出版本迁移信息。
- validate:验证要执行的迁移脚本。
- baseline:为已经存在的数据库建立基线,迁移数据库将建立在基线的基础上。
- repair:修复
flyway_schema_histry表。
三、Flyway 管理已存在的数据库
- 导出脚本:把现有数据库的结构和数据导出为 SQL 脚本,起名如
V1__Base_version.sql。 - 清理数据:这步可以跳过,如果数据不再需要可以运行清理命令:
mvn flyway:clean。 - 建立基线:
mvn flyway:baseline。
之后对数据库的修改就可以通过 Flyway 来管理了。