flyway入门使用教程
官网
简介
Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。
在Maven中集成并使用
Maven中引入Flyway插件与MySQL整合
1 | <plugin> |
configuration配置简介
| 参数 | 是否必须 | 默认值 | 描述 |
|---|---|---|---|
| driver | 否 | 会根据数据库连接自动判断 | 用于连接数据库的jdbc驱动 |
| url | 是 | – | 连接数据库的链接,对特殊符号需要进行转义。例如:&需要转为& |
| user | 否 | – | 数据库账号名 |
| password | 否 | – | 数据库账号密码 |
| locations | 否 | filesystem:src/main/resources/db/migration | 指定数据库迁移sql执行脚本路径。有两种配置方式:1.通过classpath:指定类路径的包地址。2.通过filesystem:从项目的跟目录开始填写路径 |
| table | 否 | flyway_schema_history | 记录flyway框架执行的历史记录名称,库中没有会自动创建 |
| sqlMigrationPrefix | 否 | V | 版本化SQL迁移文件名前缀,一般sql脚本的命名规范为前缀+版本号+分割符+描述+后缀。例如V1.1__Create_new_table.sql |
| undoSqlMigrationPrefix | 否 | U | 撤销SQL迁移的脚本文件名前缀。撤销与该脚本具有相同版本号的SQL迁移文件造成的影响。文件命名结构:前缀+版本号+分割符+描述+后缀。例如:U1.1__Undo.sql。此配置仅限于商业版可用,社区版不可用 |
| repeatableSqlMigrationPrefix | 否 | R | 可重复执行的SQL迁移脚本,命名规范:前缀+分割符+描述+后缀。例如:R__Repea_run.sql |
| sqlMigrationSeparator | 否 | __ | SQL迁移的文件名分隔符。注意是双下划线而不是一个 |
| sqlMigrationSuffixes | 否 | .sql | SQL迁移文件后缀。文件命名结构:V1.1__Add_data.sql。可以指定多个后缀。例如: .sql,.pkg,.pkd。方便与其他工具兼容 |
| encoding | 否 | UTF-8 | 指定SQL脚本编码格式 |
- 更多配置可参考官网
使用
mvn flyway:migrate迁移

将架构迁移到最新版本。 如果flyway_schema_history不存在,它将自动创建架构历史记录表。
迁移是Flyway工作流程的核心。它将扫描文件列表或类路径以获取可用的迁移。它将它们与已应用于数据库的迁移进行比较。如果发现任何差异,它将迁移数据库以缩小差距。
迁移最好在应用程序启动时执行,以避免数据库和代码期望之间的任何不兼容性。
执行迁移是幂等的,并且可以安全地完成迁移,而不管架构的当前版本如何。
示例1:我们具有9版之前的迁移功能,并且数据库的版本为5版。
迁移将依次应用迁移6、7、8和9。示例2:我们提供了版本9之前的可用迁移,并且数据库的版本为9。
迁移不执行任何操作。以上内容原自官网,使用Google翻译进行的机翻
在
src/main/resources/db/migration目录下创建第一个sql迁移脚本V1.0__Create_user_table.sql1
2
3
4
5
6
7
8
9
10
11
12
13DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP,
`valid` tinyint(2) NOT NULL DEFAULT 0 COMMENT '是否有效 0.有效 1.无效',
`delete_time` datetime(0) NULL DEFAULT NULL,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号名称',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '加密后密码',
`salt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码盐值',
`admin_role_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色id(多个使用,号隔开)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户表' ROW_FORMAT = Compact;输入maven命令
mvn compile flyway:migrate,可以看到控制台打印,执行成功
可以查看数据库发现除了
user表外还多了一张flyway_schema_history表(图1),这张表中保存了每次执行migration的记录(图2)

当再次执行
mvn compile flyway:migrate命令时,控制台会打印,目前数据库处于最新版本,无需进行迁移
可以再创建一个sql脚本
V1.1__ADD_data_to_user.sql来向user表中添加数据:1
2
3
4
5
6
7
8
9INSERT INTO `test`.`user`(`delete_time`, `name`, `password`, `salt`, `admin_role_ids`) VALUES
('2020-04-10 11:10:09', '11', '11', '11', '11'),
('2020-04-10 11:10:09', '11', '11', '11', '11'),
('2020-04-10 11:10:09', '11', '11', '11', '11'),
('2020-04-10 11:10:09', '11', '11', '11', '11'),
('2020-04-10 11:10:09', '11', '11', '11', '11'),
('2020-04-10 11:10:09', '11', '11', '11', '11'),
('2020-04-10 11:10:09', '11', '11', '11', '11'),
('2020-04-10 11:10:09', '11', '11', '11', '11')
- 再次执行
mvn compile flyway:migrate命令,查看控制台,可以看到flyway自动检测到了版本更新,并执行了添加脚本将数据添加到user表中

mvn flyway:clean清除所有表
删除已配置数据库中的所有表。

clean对与在开发和测试中有很大的帮助。这样当再执行migrate 迁移命令时会重新创建表,可以避免在测试中出现的一些脏数据影响代码逻辑。
- 在线上环境中慎用
mvn flyway:info打印迁移信息
打印有关所有迁移的详细信息和状态信息。

mvn flyway:validate校验
针对已解决的迁移(在文件系统或类路径上)验证已应用的迁移,以检测可能会导致无法准确创建架构的意外更改。
如果验证失败:
- 发现迁移名称,类型或校验和方面的差异
- 已应用不再在本地解析的版本
- 已解决尚未应用的版本

mvn flyway:undo撤销
撤消最近应用的版本迁移。

mvn flyway:baseline基准
对现有数据库进行基准测试,如果不存在flyway_schema_history文件,则会直接创建,并以当前状态为版本1

mvn flyway:repair修复
修复Flyway模式历史记录表。这将执行以下操作:
- 在没有DDL事务的数据库上删除所有失败的迁移
(留下的用户对象仍必须手动清理) - 将可用迁移的校验和,描述和类型与可用迁移重新对齐

参考 官网
作者: 只是学习学习
邮箱: fengzxia1000@163.com
原文地址: https://fengzxia.gitee.io/posts/cd84d80b.html
版权声明: 商业转载请联系作者获得授权,非商业转载请注明出处。