Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据库迁移工具 Flyway 使用

数据库迁移工具 Flyway 使用

原创
作者头像
ZHANGHAO
修改于 2022-05-14 00:58:12
修改于 2022-05-14 00:58:12
3.8K00
代码可运行
举报
文章被收录于专栏:张浩的专栏张浩的专栏
运行总次数:0
代码可运行

Flyway 数据库迁移工具

它仅基于 7 个基本命令: Migrate、 Clean、 Info、 Validate、 Undo、 Baseline和 Repair。

迁移可以用SQL (支持特定于数据库的语法(如 PL/SQL、T-SQL 等))或Java (用于高级数据转换或处理 LOB)编写。

它有一个命令行客户端。如果您在 JVM 上,我们建议使用Java API 在应用程序启动时迁移数据库。或者,您也可以使用Maven 插件 或Gradle 插件。

如果这还不够,还有 适用于 Spring Boot、Dropwizard、Grails、Play、SBT、Ant、Griffon、Grunt、Ninja 等的插件!

支持的数据库有 Oracle、 SQL Server(包括 Amazon RDS 和 Azure SQL 数据库)、 Azure Synapse(以前的数据仓库)、 DB2、 MySQL(包括 Amazon RDS、Azure 数据库和 Google Cloud SQL)、 Aurora MySQL、 MariaDB、 Percona XtraDB Cluster、 TestContainers , PostgreSQL (包括 Amazon RDS, Azure Database, Google Cloud SQL, TimescaleDB, YugabyteDB & Heroku), Aurora PostgreSQL , Redshift , CockroachDB , SAP HANA , Sybase ASE、 Informix、 H2、 HSQLDB、 Derby、 Snowflake、 SQLite和 Firebird。

Oracle 支持情况:Oracle 12.2 及以上版本。11g 可通过修改源码实现使用。

Spring Boot 集成 Flyway

Spring Boot 官方提供了两款高级别的迁移工具:Flyway 和 Liquibase

Flyway 集成
  1. 添加依赖 org.flywaydb:flyway-core
  2. 启动时,自动化的运行Flyway 数据库迁移
Flyway 配置
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  flyway:
    # flyway 的 clean 命令会删除指定 schema 下的所有 table, 应该禁掉
    clean-disabled: true
    # 迁移脚本的位置
    locations: classpath:db/migration
    #flyway 的 metadata 表名, 缺省为 flyway_schema_history
    table: my_flyway_schema_history
    #多人协作开发, 很可能先 apply 了自己本地的最新 SQL 代码, 然后发现其他同事早先时候提交的 SQL 代码还没有 apply,
    #所以 开发环境应该设置 spring.flyway.outOfOrder=true, 这样 flyway 将能加载漏掉的老版本 SQL 文件;
    #生产环境建议为 spring.flyway.outOfOrder=false
    out-of-order: true

Flyway 概念

迁移类型
  1. 版本化迁移:只执行一次,不可进行修改
  2. 撤消迁移:进行撤销版本化迁移,收费版本可用
  3. 可重复迁移:可以执行多次的迁移,可以进行修改,修改后重新执行
命名模式

为了被 Flyway 采用,SQL 迁移必须符合以下命名模式:

  1. 版本化迁移 V20220504113919__create_student.sql
  2. 撤消迁移 U20220504132902__create_student.sql
  3. 可重复的迁移 R__add_student.sql

文件名如下组成:

  1. 前缀:V用于版本化(可配置)、U撤消(可配置)和 R可重复迁移(可配置)
  2. 版本:带有点或下划线的版本可以根据需要分隔任意数量的部分(不适用于可重复的迁移)
  3. 分隔符:__两个下划线(可配置)
  4. 说明:下划线或空格分隔单词
  5. 后缀:.sql(可配置)

自动进行迁移

在 Spring Boot 应用程序启动时,自动进行迁移

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
2022-05-04 15:11:36.325  INFO 13303 --- [           main] o.f.c.internal.license.VersionPrinter    : Flyway Community Edition 7.7.3 by Redgate
2022-05-04 15:11:36.642  INFO 13303 --- [           main] o.f.c.i.database.base.DatabaseType       : Database: jdbc:oracle:thin:@localhost:1521:XE (Oracle 12.1)
2022-05-04 15:11:36.793  INFO 13303 --- [           main] o.f.core.internal.command.DbValidate     : Successfully validated 3 migrations (execution time 00:00.023s)
2022-05-04 15:11:36.815  INFO 13303 --- [           main] o.f.core.internal.command.DbMigrate      : Current version of schema "FLYWAY": << Empty Schema >>
2022-05-04 15:11:36.815  WARN 13303 --- [           main] o.f.core.internal.command.DbMigrate      : outOfOrder mode is active. Migration of schema "FLYWAY" may not be reproducible.
2022-05-04 15:11:36.830  INFO 13303 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema "FLYWAY" to version "20220504113919 - create student"
2022-05-04 15:11:36.873  INFO 13303 --- [           main] o.f.c.i.s.DefaultSqlScriptExecutor       : 0 rows affected
2022-05-04 15:11:36.938  INFO 13303 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema "FLYWAY" to version "20220504132902 - create seq"
2022-05-04 15:11:36.944  INFO 13303 --- [           main] o.f.c.i.s.DefaultSqlScriptExecutor       : 0 rows affected
2022-05-04 15:11:36.977  INFO 13303 --- [           main] o.f.core.internal.command.DbMigrate      : Migrating schema "FLYWAY" to version "20220504135829 - select student"
2022-05-04 15:11:36.982  INFO 13303 --- [           main] o.f.c.i.s.DefaultSqlScriptExecutor       : +----+------+
| ID | NAME |
+----+------+
| No rows r |
+----+------+

2022-05-04 15:11:37.013  INFO 13303 --- [           main] o.f.core.internal.command.DbMigrate      : Successfully applied 3 migrations to schema "FLYWAY", now at version v20220504135829 (execution time 00:00.208s)

迁移记录

迁移会记录到 flyway_schema_history 表中

installed_rank

version

description

type

script

checksum

installed_by

installed_on

execution_time

success

1

20220504113919

create student

SQL

V20220504113919__create_student.sql

1002084112

FLYWAY

2022-05-04 15:11:36.909950

48

1

2

20220504132902

create seq

SQL

V20220504132902__create_seq.sql

-1063390250

FLYWAY

2022-05-04 15:11:36.956655

9

1

3

20220504135829

select student

SQL

V20220504135829__select_student.sql

-1463386058

FLYWAY

2022-05-04 15:11:36.995406

9

1

IDEA插件

Flyway Migration Creation

使用 Flyway Migration Creation,可以很方便的在IDEA中创建Versioned Migration和Repeatable Migration

其他

官方网站:https://flywaydb.org

GitHub:https://github.com/flyway/flyway

Question

Q:db/migration 迁移文件越来越多的问题

A:可以在 db/migration 下面自己建立文件夹,存放自己的迁移

Q:多个项目时,因为要集成到项目里面,自动迁移,是需要新建个项目吗?专门用来存放脚本吗?

A:目前有多种方案,采用其中一种即可:

  1. 可以多个项目里面,都添加 Flyway,使用不同的 flyway_schema_history 表进行管理 ;
  2. 指定一个现有项目,添加 Flyway,所有的迁移都放到这个项目中;
  3. 新建一个项目,添加 Flyway,所有的迁移都放到这个项目中;
  4. 新建一个项目,添加 Flyway,使用 Gradle 或者 Maven 插件进行迁移。

Q:集群部署,同时启动执行,会不会有问题

A:会有问题,配置一台启用 Flyway 就可以了,在启动的命令里面加上-Dspring.flyway.enabled=true,其他的可以在 Apollo 或者 Nacos 中 配置 spring.flyway.enabled=false。这样启动的时候,只有一台实例自动化执行 Flyway 的迁移。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据库迁移搞炸了!竟然没用这款开源神器的锅?
当我们的应用升级时往往会伴随着数据库表结构的升级,此时就需要迁移数据库的表结构。一般我们会使用工具或者脚本来实现,手动操作毕竟有一定风险,要是能在应用启动时自动升级数据库表结构就好了!Flyway正是这么一款工具,通过Flyway和SpringBoot结合使用,在应用启动时就可以自动升级数据库表结构,非常方便,推荐给大家!
Java程序猿阿谷
2021/01/14
1.4K0
数据库迁移搞炸了!竟然没用这款开源神器的锅?
Spring Boot Flyway数据库
Flyway是一个版本控制应用程序,可以在所有实例中轻松可靠地演变数据库模式。要了解有关Flyway的更多信息,可以使用链接 - www.flywaydb.org[1]
黑洞代码
2021/10/14
1.4K0
Spring Boot 集成 Flyway 实现数据库版本控制
在项目迭代开发中,难免会有更新数据库 Schema 的情况,比如添加新表、在表中增加字段或者删除字段等,那么当我对数据库进行一系列操作后,如何快速地在其他同事的电脑上同步?如何在测试/生产服务器上快速同步?
武培轩
2020/05/09
2.2K0
Spring Boot 集成 Flyway 实现数据库版本控制
芋道 Spring Boot 数据库版本管理入门
在我们的认知中,我们会使用 SVN 或 Git 进行代码的版本管理。但是,我们是否好奇过,数据库也是需要进行版本管理的呢?
芋道源码
2020/05/19
7.9K0
芋道 Spring Boot 数据库版本管理入门
Spring Boot 2.x基础教程:使用Flyway管理数据库版本
之前已经介绍了很多在Spring Boot中使用MySQL的案例,包含了Spring Boot最原始的 JdbcTemplate(https://blog.didispace.com/spring-boot-learning-21-3-1/)、Spring Data JPA(https://blog.didispace.com/spring-boot-learning-21-3-4/)以及我们国内最常用的MyBatis。同时,对于一些复杂场景比如:更换Druid数据源,或是多数据源的情况也都做了介绍。 不论
程序猿DD
2023/04/17
1.2K0
Spring Boot 2.x基础教程:使用Flyway管理数据库版本
Spring Boot中使用Flyway来管理数据库版本
久违了的Spring Boot系列,今天抽空更新一篇。之前写过很多篇关于数据访问的文章了,比如下面这些: 使用JdbcTemplate 使用Spring-data-jpa简化数据访问层(推荐) 多数据源配置(一):JdbcTemplate 多数据源配置(二):Spring-data-jpa 使用NoSQL数据库(一):Redis 使用NoSQL数据库(二):MongoDB 整合MyBatis MyBatis注解配置详解 使用事务管理 在上面的使用JdbcTemplate一文中,主要通过spring提供的J
程序猿DD
2018/02/01
2.2K0
Spring Boot中使用Flyway来管理数据库版本
Spring Boot 集成 Flyway,数据库也能做版本控制
Flyway是一款数据库迁移(migration)工具。简单点说,就是在你部署应用的时候,帮你执行数据库脚本的工具。
码猿技术专栏
2023/05/01
1K0
Spring Boot 集成 Flyway,数据库也能做版本控制
【DB系列】SpringBoot集成Flyway版本迭代框架
最近项目中引入了 Flyway 这个管理数据库版本框架,目的是为了解决我们一直存在的数据库脚本迭代混乱这个问题。说来惭愧,公司一直都是手动迭代数据库版本,配置MybatisPlus的init-sql组件使用的。
框架师
2021/11/22
2K0
【DB系列】SpringBoot集成Flyway版本迭代框架
数据库版本管理工具Flyway应用 转
Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。
wuweixiang
2019/04/09
3K0
数据库版本管理工具Flyway应用
                                                                            转
挺带劲!这款开源数据库迁移工具超牛逼
迁移数据库可以说是日常工作中的家常便饭,不过,如果一不小心把数据库搞炸了,那就麻烦大了(搞不好就得背锅了)。随着数据量的逐渐增加、表结构的改动,数据库各类迁移、升级是势在必行。所以,有一款好的迁移工具是可以大大提高工作效率,还能很大程度上避免手动操作带来的失误或数据损坏、丢失的风险。
民工哥
2021/07/16
5K0
挺带劲!这款开源数据库迁移工具超牛逼
SpringBoot整合Flyway(数据库版本迁移工具)
在团队开发当中,有可能每个人都是使用自己本地的数据库。当数据库的表或者字段更新时,往往需要告知团队的其他同事进行更新。 Flyway数据库版本迁移工具,目的就是解决该问题而诞生的(我自己想的)。每当我们更新数据库的时候,只需要添加SQL文件到指定目录中。Flyway会在数据库创建一个表,专门记录已更新的SQL文件。当我们下次执行时则不会执行已记录并且执行成功的SQL文件。
Johnson木木
2020/06/04
1.7K0
Spring Boot + Flyway 实现数据库版本管理神器
Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成 SQL 脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。
业余草
2020/05/27
7.9K1
Spring学习笔记(三十七)——Flyway 数据库版本控制
Flyway,是一个数据库版本管理工具。每次上线新功能的时候,都需要先更新数据库,然后再部署代码。当数据库的更新部分很多时,难免会忘掉,造成升级失败。 另外一个问题的是,当你的服务是允许客户自己私有部署的时候,每个客户可能都在不同的数据库版本上,这时候对于不同的客户给与不同的升级机制就相当重要了。
不愿意做鱼的小鲸鱼
2022/09/26
6.2K0
Spring学习笔记(三十七)——Flyway 数据库版本控制
Flyway 助力数据库脚本自动化管理攻略
今天,探讨一个有趣的话题:我们可以通过 Git 来实现项目版本控制;通过 Jenkins 进行持续集成,那么对于数据库层面,我们仍然依赖于纯手工运行 SQL 脚本,对此,我们在多环境(开发环境、测试环境、预发环境、生产环境)中如何确保其 SQL 脚本的最新性和正确性?
用户2781897
2019/10/24
1.4K0
【SpringBoot系列】SpringBoot微服务集成Flyway
我们在日常工作中通常遇到的大多数服务只是从用户那里获取一些输入并填充数据库,并从数据库中读取并在 UI 上显示。每个数据库都有一个Schema,我们会在需求发生变化时进行迭代过程,以修改我们的Schema。现在,所有这些迁移都可以单独驻留在应用程序中,并且可以由数据库团队处理,我们可以以版本控制的方式将此迁移脚本与应用程序一起保留,并在应用程序启动时应用它们,这就是flyway为我们所做的。
Freedom123
2024/04/23
4760
SpringBoot整合Flyway完成数据库持久化迭代更新
每次服务的代码更新部署,难免会存在数据库结构的变更以及字典数据的添加,手动执行更新脚本是一个耗时耗力的工作,而且还会出现遗漏或者其他状况,SpringBoot内部集成了一个自动执行数据库脚本的第三方依赖Flyway来解决这个繁琐的问题。
恒宇少年
2019/11/04
1.3K0
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新
为此我做了相关调研,发现常见的开源迁移工具 Liquibase 和 Flyway使用和对比最多,那么就进行一场二选一的角逐吧!
鲲志说
2025/04/07
940
基于springboot+jpa 实现多租户动态切换多数据源 - 使用Flyway实现多数据源数据库脚本管理和迭代更新
老板:把数据库变更,给整利索了
http://xjjdog.cn 对200+原创文章进行了细致的分类,阅读更流畅,欢迎收藏。
xjjdog
2020/12/11
1.2K0
老板:把数据库变更,给整利索了
Flyway使用
Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理我们的数据库版本。
Li_XiaoJin
2022/11/23
1.3K0
Flyway使用
Flyway数据迁移工具使用和安装
以前生产环境数据库增加字段是写一个sql放入本地,到时候部署生产环境的时候先手动执行sql,在部署项目。Flyway数据迁移工具主要是用来控制数据库增删改的版本控制,类似于git,可是相比git代码管理,他的版本控制是通过数据库当中的flyway_schema_history来控制的,这样每次部署生产环境的时候就不需要人工再去执行sql,部署项目的时候sql会自动执行。
编程软文
2020/03/24
1.9K0
Flyway数据迁移工具使用和安装
推荐阅读
相关推荐
数据库迁移搞炸了!竟然没用这款开源神器的锅?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验