数据库版本管理工具 Flyway 简单使用

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 如何快速上手使用数据版本管理工具 Flyway
  • 前言

随着开发版本的迭代,数据库的字段的变更在所难免,很早之前我们在发布版本的时候都会自己手动把开发环境的数据库表和字段的变更同步生产环境

当我们有了释放双手的想法的时候 就发现了 Flyway

[Flyway 官方地址](https://flywaydb.org)


  • Flyway和SpringBoot整合
  • 第一步,引入pom.xml依赖
<dependencies><!-- 非必要的,启动时候测试用的 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 如下依赖是必须的 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- Mybatis 或者 Spring家的ORM框架 不然flyway自动配置不会生效 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.1</version></dependency><!-- 数据库版本控制工具--><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>7.11.4</version></dependency></dependencies>
  • 第二步:创建一个数据库,并在yml文件或者properties文件中添加上数据库配置
spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/flyway?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: root
  • 第三步:在resource目录下创建db/migration文件夹

然后在创建的文件夹下创建一个V20210826_1__create_person.sql文件

V20210826_1是版本号 默认写法格式:V版本号__xxx.sql

版本号可以有多种写法,日期写法是我比较喜欢的一种写法


image.png


<!-- 如下是3个文件的内容 注意版本号必须是保持递增的 --><!-- V20210826_1__create_person.sql-->CREATETABLE `person` (  `id` int(11)NOTNULL AUTO_INCREMENT COMMENT '主键ID',  `name` varchar(64) DEFAULT NULL COMMENT '姓名',  `birthday` datetime DEFAULT NULL COMMENT '生日',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;<!-- V20210826_2__add_person.sql-->INSERTINTO `flyway`.`person`(`name`, `birthday`)VALUES('fun007','1995-01-02 16:25:32');<!-- V20210826_3__alter_person.sql-->ALTERTABLE person MODIFY birthday date COMMENT '生日';


  • 第四步:直接run起来Springboot项目。观察日志

image.png

可以看到我们编写的三个SQL文件都执行了~,然后再去数据库看下(也都成功了 flyway_schema_history记录编写SQL的执行情况)

image.png


  • 接下来可以看看maven集成flyway插件的用法

先看效果:

image.png

  • 引入插件在pom.xml中
<plugin><groupId>org.flywaydb</groupId><artifactId>flyway-maven-plugin</artifactId><version>7.11.4</version><configuration><url>jdbc:mysql://127.0.0.1:3306/flyway?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT</url><user>root</user><password>root</password><driver>com.mysql.cj.jdbc.Driver</driver></configuration></plugin>

插件命令说明

baseline:对于非空数据库做的数据迁移之前先把这些数据信息记录到schema表中,否则保错

clean:清空数据库

info:查看编写SQL的执行状态

migrate:迁移数据,执行SQL文件

repair:修复一些手动改动后版本

undo: 撤销最近做的迁移操作,免费版本不支持

validate: 应用迁移操作之前做的一些校验


  • 对于已存在的数据库表处理方式

直接运行启动程序的时候会报错

image.png

两种方式解决:

  • 如果安装了插件:执行 flyway:baseline 再运行程序
  • 或者在配置文件添加如下配置
spring:  flyway:    baseline-on-migrate: true

扩展:查看配置文件如何修改一些默认配置

org.springframework.boot.autoconfigure.flyway.FlywayProperties


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11月前
|
存储 关系型数据库 数据库连接
flyway适配高斯数据库
flyway适配高斯数据库
278 0
|
1月前
|
SQL Java 数据库
使用Spring Boot和Flyway进行数据库迁移
使用Spring Boot和Flyway进行数据库迁移
|
12天前
|
SQL 关系型数据库 MySQL
「Go开源」goose:深入学习数据库版本管理工具
「Go开源」goose:深入学习数据库版本管理工具
「Go开源」goose:深入学习数据库版本管理工具
|
3月前
|
容灾 Java 数据库
OceanBase数据库常见问题之spring boot应用增加了flyway的依赖但没执行如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
SQL 数据库 开发工具
真香!flyway数据库版本控制
真香!flyway数据库版本控制
237 0
|
SQL Oracle 关系型数据库
SpringBoot + Flyway,自动化实现数据库版本控制
SpringBoot + Flyway,自动化实现数据库版本控制
|
SQL druid Java
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新
1555 0
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新
|
SQL 存储 Oracle
Flyway数据库脚本管理工具使用经验
在常见的敏捷开发过程中,迭代的更新频繁出现,每个迭代数据库脚本也经常会更新,为了更好地管理项目中的数据库脚本,下面为大家介绍一款数据库脚本管理工具Flyway,希望对大家有帮助!
1190 1
Flyway数据库脚本管理工具使用经验
|
SQL 安全 JavaScript
SpringBoot整合Flyway完成数据库持久化迭代更新
每次服务的代码更新部署,难免会存在`数据库结构`的变更以及`字典数据的添加`,手动`执行更新脚本`是一个`耗时耗力`的工作,而且还会出现遗漏或者其他状况,`SpringBoot`内部集成了一个自动执行数据库脚本的第三方依赖`Flyway`来解决这个繁琐的问题。
|
SQL Java 数据库
数据库迁移神器——Flyway(二)
Hello 大家好,我是阿粉,不知道你有没有遇到过这种场景,一套代码部署在不同的环境中,随着时间的过去,各个环境代码有版本差异,代码层面可以通过不同的版本来控制,但是数据库层面经常容易忘记更新!
数据库迁移神器——Flyway(二)