flyway入门使用教程

3 篇文章 0 订阅

官网

https://flywaydb.org/

简介

Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。

在Maven中集成并使用

Maven中引入Flyway插件与MySQL整合

<plugin>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-maven-plugin</artifactId>
  <version>6.2.4</version>
  <configuration>
    <driver>com.mysql.cj.jdbc.Driver</driver>
    <url>jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false</url>
    <user>root</user>
    <password>root</password>
    <locations>
      <location>filesystem:src/main/resources/db/migration</location>
    </locations>
    <table>flyway_schema_history</table>
    <sqlMigrationPrefix>V</sqlMigrationPrefix>
    <undoSqlMigrationPrefix>U</undoSqlMigrationPrefix>
    <repeatableSqlMigrationPrefix>R</repeatableSqlMigrationPrefix>
    <sqlMigrationSeparator>__</sqlMigrationSeparator>
    <sqlMigrationSuffixes>.sql</sqlMigrationSuffixes>
    <encoding>UTF-8</encoding>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.19</version>
    </dependency>
  </dependencies>
</plugin>

configuration配置简介

参数是否必须默认值描述
driver会根据数据库连接自动判断用于连接数据库的jdbc驱动
url连接数据库的链接,对特殊符号需要进行转义。例如:&需要转为&amp;
user数据库账号名
password数据库账号密码
locationsfilesystem:src/main/resources/db/migration指定数据库迁移sql执行脚本路径。有两种配置方式:1.通过classpath:指定类路径的包地址。2.通过filesystem:从项目的跟目录开始填写路径
tableflyway_schema_history记录flyway框架执行的历史记录名称,库中没有会自动创建
sqlMigrationPrefixV版本化SQL迁移文件名前缀,一般sql脚本的命名规范为前缀+版本号+分割符+描述+后缀。例如V1.1__Create_new_table.sql
undoSqlMigrationPrefixU撤销SQL迁移的脚本文件名前缀。撤销与该脚本具有相同版本号的SQL迁移文件造成的影响。文件命名结构:前缀+版本号+分割符+描述+后缀。例如:U1.1__Undo.sql此配置仅限于商业版可用,社区版不可用
repeatableSqlMigrationPrefixR可重复执行的SQL迁移脚本,命名规范:前缀+分割符+描述+后缀。例如:R__Repea_run.sql
sqlMigrationSeparator__SQL迁移的文件名分隔符。注意是双下划线而不是一个
sqlMigrationSuffixes.sqlSQL迁移文件后缀。文件命名结构:V1.1__Add_data.sql
可以指定多个后缀。例如:.sql,.pkg,.pkd。方便与其他工具兼容
encodingUTF-8指定SQL脚本编码格式

使用

mvn flyway:migrate迁移

Gjrr3q.png

将架构迁移到最新版本。 如果flyway_schema_history不存在,它将自动创建架构历史记录表。

迁移是Flyway工作流程的核心。它将扫描文件列表或类路径以获取可用的迁移。它将它们与已应用于数据库的迁移进行比较。如果发现任何差异,它将迁移数据库以缩小差距。

迁移最好在应用程序启动时执行,以避免数据库和代码期望之间的任何不兼容性。

执行迁移是幂等的,并且可以安全地完成迁移,而不管架构的当前版本如何。

  • 示例1:我们具有9版之前的迁移功能,并且数据库的版本为5版。
    迁移将依次应用迁移6、7、8和9。
  • 示例2:我们提供了版本9之前的可用迁移,并且数据库的版本为9。
    迁移不执行任何操作。

以上内容原自官网,使用Google翻译进行的机翻

  1. src/main/resources/db/migration目录下创建第一个sql迁移脚本V1.0__Create_user_table.sql

    DROP 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;
    
  2. 输入maven命令mvn compile flyway:migrate,可以看到控制台打印,执行成功

  3. 可以查看数据库发现除了user表外还多了一张flyway_schema_history表(图1),这张表中保存了每次执行migration的记录(图2)
    图1

    图2

  4. 当再次执行mvn compile flyway:migrate命令时,控制台会打印,目前数据库处于最新版本,无需进行迁移
    Gj0ZjS.png

  5. 可以再创建一个sql脚本V1.1__ADD_data_to_user.sql来向user表中添加数据:

    INSERT 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')
    
  6. 再次执行mvn compile flyway:migrate命令,查看控制台,可以看到flyway自动检测到了版本更新,并执行了添加脚本将数据添加到user表中
    GjB3ad.png

    GjBbz6.png

mvn flyway:clean清除所有表

删除已配置数据库中的所有表。

clean对与在开发和测试中有很大的帮助。这样当再执行migrate 迁移命令时会重新创建表,可以避免在测试中出现的一些脏数据影响代码逻辑。

  • 在线上环境中慎用

mvn flyway:info打印迁移信息

打印有关所有迁移的详细信息和状态信息。

GjyLhd.png

mvn flyway:validate校验

用于校验,范围包括已升级的脚本是否改名,已执行的版本内容是否修改。所有针对已执行的版本进行的改动都会导致校验失败。

  • 执行migrate会自动进行校验,如果失败将不会做任何的migrate。

  • flyway希望用户提供的脚本是稳定的,以免造成额外的复杂性和混乱。

mvn flyway:undo撤销

撤消最近应用的版本迁移。

Gjg3Ox.png

mvn flyway:baseline基准

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

Gj2uHf.png

mvn flyway:repair修复

修复Flyway模式历史记录表。这将执行以下操作:

  • 在没有DDL事务的数据库上删除所有失败的迁移
    (留下的用户对象仍必须手动清理)
  • 将可用迁移的校验和,描述和类型与可用迁移重新对齐

Gj2s29.png

参考 官网

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值