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 来迁移了。