FlyWay入门教程

article/2025/11/10 7:58:26

文章目录

  • Flyway
    • 1. 概述
    • 2. 工作原理与基本概念
      • 工作原理概述
      • 基本概念
        • **[Migration(迁移)](https://flywaydb.org/documentation/concepts/migrations#naming)**
    • 3. 安装和基本使用
      • 命令行
        • 安装
        • 使用
        • 命令
      • Java API
      • Spring Boot

Flyway

Flyway by Redgate • 数据库迁移变得简单。 ---- 数据库的版本控制

1. 概述

Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用,或者在Java应用程序中引入,用于管理我们的数据库版本。

用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同人的sql脚本,从而做到数据库同步。

应用场景:

在项目或产品中,很难一开始就把业务理清楚,把数据库表设计好,因此数据表也会在迭代周期不断迭代。在Java应用程序中使用Flyway,能快速有效地用于迭代数据库表结构,并保证部署到测试环境或生产环境时,数据表都是保持一致的。

适用人员:

  • 架构人员:搭建框架初始数据库的;
  • 开发人员:在Flyway框架下做sql改动的;

支持的数据库包括:

image-20220818131622705

2. 工作原理与基本概念

工作原理概述

当 Flyway 连接数据库中的 schema 后,会先检查是否已存在 flyway_schema_history 表,如果没有则创建。该表用于跟踪数据库的状态,如数据迁移的版本,迁移成功状态等信息。

flyway_schema_history 表结构:

image-20220818141409855

flyway_schema_history 存在后,Flyway 会扫描文件系统或应用中的 classpath 目录的数据迁移文件,然后根据它们的版本号进行按序迁移,如下图:

img

由于 flyway_schema_history 表中记录了迁移的版本号,如果文件的版本号小于或等于标记为当前版本的版本号,则忽略它们不执行。(并非真正忽略,而是会校验checksum值是否一致,以此来保证历史版本文件未被篡改)

所以每次当你打算升级数据库时(包含DDL、DML语句),只需要在指定路径下创建一个版本号大于历史记录表中当前最大的版本号的迁移文件即可。在下次flyway启动时(随项目启动或其他形式),数据库将会自动完成升级,你无须再手动执行脚本。

基本概念

Migration(迁移)

使用 Flyway,对数据库的所有更改都称为迁移。迁移可以是版本化的或 可重复的。版本化迁移有两种形式:常规和撤消

Migration的方式包括:

  • SQL
  • Java
  • 脚本

迁移最常使用SQL编写。这使得上手和利用任何现有的脚本、工具和技能变得容易。它使您可以访问数据库的全部功能,并且无需了解任何中间翻译层。

基于 SQL 的迁移通常用于

  • DDL 更改(TABLES、VIEWS、TRIGGERS、SEQUENCES……的 CREATE/ALTER/DROP 语句)
  • 简单的参考数据更改(参考数据表中的 CRUD)
  • 简单的批量数据更改(常规数据表中的 CRUD)

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

image-20220818162235059

3. 安装和基本使用

命令行

Flyway 命令行工具是一个独立的 Flyway 发行版。它在 Windows、macOS 和 Linux 上运行,主要适用于希望从命令行迁移数据库而无需将 Flyway 集成到其应用程序中也无需安装构建工具的用户。 Flyway命令行工具下载地址

注意:Flyway社区版删除了Mysql5.7的支持!!!!社区版不支持undo等命令

安装

目录结构

image-20220818135026929

配置环境变量

# Win+R 输入:
rundll32.exe sysdm.cpl,EditEnvironmentVariables

添加目录到环境变量:

image-20220818143441301

添加到path中:

image-20220818143702882

使用命令行测试环境变量:

image-20220818143842268

使用

示例前置条件: 一个名为 flyway的MySQL数据库。

image-20220818155834175

  1. 配置数据库连接信息

    conf/flyway.conf中配置如下信息:

    image-20220818150814144

  2. 配置sql文件路径

    flyway.locations=filesystem:\\D:\Flyway\flyway-commandline-9.1.5-windows-x64\flyway-9.1.5\sql
    
  3. 添加sql脚本

    image-20220818160444917

  4. 执行命令flyway migrate

    image-20220818160404109

  5. 查看数据库中的表信息

    image-20220818160608227

  6. 再次执行flyway migrate

    在这里插入图片描述

    因为当前sql文件与之前没有变化,所以不会执行任何sql。

命令

  1. migrate

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

    迁移

  2. clean

    # Clean 对开发和测试有很大帮助。通过彻底清除已配置的模式,它将有效地为您提供新的开始。所有对象(表、视图、过程……)都将被删除。注意:谨慎使用,配置中默认禁用
    flyway clean
    

    干净的

  3. info

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

    image-20220818163142367

  4. validate

    # 根据可用的migration验证应用的迁移。验证可帮助您验证应用于数据库的迁移是否与本地可用的迁移相匹配。
    flyway validate
    

    证实

  5. undo

    # 撤消最近应用的版本化迁移。(社区版不支持)
    flyway undo
    

    Undo

  6. baseline

    # Baseline 用于通过在特定版本上对现有数据库进行基线来将 Flyway 引入现有数据库。这将导致Migrate忽略直到并包括基线版本的所有迁移。然后将照常应用较新的迁移。
    flyway baseline
    

    基线

  7. repair

    # 修复Flyway模式历史记录表。这将执行以下操作:
    - 删除失败的迁移条目(仅适用于不支持 DDL 事务的数据库)
    - 将应用迁移的校验和、描述和类型与可用迁移重新对齐
    - 将所有丢失的迁移标记为已删除
    flyway repair
    

    修理

  8. 其他(快照处于测试阶段、check需要.net支持)

Java API

  1. 引入依赖

      <!-- flyway --><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>5.2.4</version></dependency>
    
  2. 配置迁移文件

    在项目的 src/main/resources 下创建 db/migration 目录,该目录下放置需要数据迁移的文件。

    image-20220818170421389

  3. 编写Java程序

    import org.flywaydb.core.Flyway;/*** @ClassName: FlywayTest* @Description: Flyway* @Author: Ze WANG* @Date: 2022/8/18**/
    public class FlywayTest {public static void main(String[] args) {String url = "jdbc:mysql://ip:3306/flyway?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false&serverTimezone=GMT%2B8";String user = "root";String password = "123456";Flyway flyway = Flyway.configure().dataSource(url, user, password).load();flyway.migrate();}
    }
    

    初始化数据库,运行程序观察:

    image-20220818170739390

Spring Boot

前提条件,一个SpringBoot 程序

  1. 引入依赖

    <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId>
    </dependency>
    
  2. 配置application

      flyway:enabled: true
    #    默认clean为false,这里为了测试,谨慎使用clean-disabled: true
    #    如果数据库不是空表需要配置为truebaseline-on-migrate: truebaseline-version: 0locations:- classpath:db/migration/
    
  3. 启动项目

    # 启动项目后数据库会根据脚本变更
    

http://chatgpt.dhexx.cn/article/g3je8Z5k.shtml

相关文章

flyway的学习

Flyway 是一款开源的数据库版本管理工具。管理数据库变更的版本。 flyway工作流程如下&#xff1a; 项目启动&#xff0c;应用程序完成数据库连接池的建立后&#xff0c;Flyway自动运行。初次使用时&#xff0c;flyway会创建一个flyway_schema_history 表&#xff0c;用于记录…

Flyway的简单介绍及使用

Flyway的简单介绍及使用 一、开发时管理数据库遇到的问题&#xff1a; 现在开发一般都是团队开发&#xff0c;这样就会出现项目同步的问题&#xff0c;代码同步可以通过SVN工具管理起来&#xff0c;那数据库同步怎么办呢&#xff1f;理想的情况下&#xff0c;在开发新项目的时…

Flyway使用入门

Flyway简介 Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用&#xff0c;或者在Java应用程序中引入&#xff0c;用于管理我们的数据库版本。 在项目或产品中&#xff0c;很难一开始就把业务理清楚&#xff0c;把数据库表设计好&#xff0c;因此数据表也…

SpringBoot集成Flyway

1. 背景 Flyway是一个款数据库版本管理工具,通过集成Flyway可以实现启动项目时自动执行项目迭代升级所需Sql语句,从而减少升级项目时人工干预成本. 2. 集成Flyway pom文件引入依赖 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway…

Flyway介绍和使用

一 使用背景 在我们日常产品发布的过程中&#xff0c;代码的版本控制可以使用git、svn工具实现。对于数据库每当发布时会出现手动执行sql脚本进行升级数据库&#xff0c;中间经常出现一些漏写、错写情况&#xff0c;对数据库的版本与代码的版本不匹配&#xff0c;导致上线后出…

Flyway简介

Flyway简介 总结&#xff1a;Flyway可以很方便的帮我们完成数据库部署和增量升级&#xff0c;很有用&#xff0c;但是版本回滚操作并不给力&#xff5e;&#xff5e;&#xff5e; 1、简介 1.1、Flyway是什么 Flyway是一款数据库迁移&#xff08;migration&#xff09;工具。简…

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

目录 一、简介 二、核心概念 1、Schema History Table 2、Migration 3、Versioned migrations 三、集成 SpringBoot 1、pom文件中引入依赖 2、application.yml配置 3、sql 脚本编写 四、初始化数据库 五、注意事项 一、简介 Flyway是一款开源的数据库版本管理工具&am…

Flyway简介及使用

Flyway简介及使用 1、简介 1.1 Flyway是什么&#xff1f; Flyway是一款开源的数据库版本管理工具&#xff0c;它更倾向于规约优于配置的方式。 Flyway可以独立于应用实现管理并跟踪数据库变更&#xff0c;支持数据库版本自动升级&#xff0c;并且有一套默认的规约&#xff0…

Flyway基础简介

1. 概述 Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。 自动升级&#xff08;自动发现更新项&#xff09;&#xff1a;Flyway 会将任意版本的数据库升级到最新版本。Flyway 可以脱离JVM 环境通过命令行执行&#xff0c;可以通过Ant 脚本执行&#…

flyway的学习总结

一、简单介绍 Flyway 是一款开源的数据库版本管理工具。它可以很方便的在命令行中使用&#xff0c;或者在Java应用程序中引入&#xff0c;用于管理我们的数据库版本。 在项目或产品中&#xff0c;很难一开始就把业务理清楚&#xff0c;把数据库表设计好&#xff0c;因此数据表…

Flyway——配置和使用(入门)

文章目录 介绍测试环境依赖引入配置数据库连接启动类设置脚本项目结构概览项目启动&#xff0c;观察日志和数据库结果测试R开头的脚本直接重启项目修改 R__add_user_info.sql 后重启 变更数据库字段验证 V 只能执行一次的问题验证 R 可执行多次验证只有一个_会报错技能扩充参考…

flyway的快速入门教程

目录 一、简单介绍 二、为什么要使用flyway 三、flyway是如何工作的 四、如何使用flyway 1、先要初始化一个SpringBoot项目&#xff0c;引入依赖 2、在application.yml中添加相关配置 3、根据配置文件中填写的脚本存放路径&#xff0c;创建文件夹 4、添加需要运行的sql…

Flyway详解(使用说明及避坑指南、一文搞懂flyway)

一、简介 1.1 Flyway是什么&#xff1f; Flyway是一款开源的数据库版本管理工具&#xff0c;可以实现管理并跟踪数据库变更&#xff0c;支持数据库版本自动升级&#xff0c;而且不需要复杂的配置&#xff0c;能够帮助团队更加方便、合理的管理数据库变更。 例&#xff1a;创建…

MySQL数据库的集群解决方案(一)

读写分库架构 我们一般应用对数据库而言都是“读多写少”&#xff0c;也就说对数据库读取数据的压力比较大&#xff0c;有一个思路就是说采用数据库集群的方案&#xff1a; 其中一个是主库&#xff0c;负责写入数据&#xff0c;我们称之为&#xff1a;写库&#xff1b; 其它都是…

MySQL数据库集群实战(1)——MySQL数据库基础知识

文章目录 一、为什么使用数据库&#xff1f;二、数据库概念数据库&#xff08;DataBase&#xff0c;DB&#xff09;数据库管理系统&#xff08;DataBase Management System&#xff0c;DBMS&#xff09;SQL概述 三、数据库存储文件的特点四、MySQL常见的数据对象五、MySQL数据类…

mysql-集群概述

mysql-主从模式 mysql-集群概述 可用性设计 站点高可用&#xff0c;冗余站点服务高可用&#xff0c;冗余服务 数据高可用&#xff0c;冗余数据 保证高可用的方法是冗余。但是数据冗余带来的问题是数据一致性问题 实现高可用的方案有以下几种架构模式&#xff1a; 主从模式 简…

MySQL数据库集群的原理与搭建

【1.应用背景】 在最近做的项目中&#xff0c;因为有一个短时间内很多人访问服务&#xff0c;会频繁访问数据库&#xff0c;看到这里不免有些人会想起数据库集群。我们组长也想到了用数据库集群&#xff0c;于是就带着我们几个研究起来了mysql数据库集群的搭建。因为我们几个的…

MySQL 数据库主从集群搭建

文章目录 1 准备工作2 配置主数据库3 配置从库4 从库设置只读用户5 推荐参考资料 1 准备工作 1 选择一个服务器当做主服务器&#xff0c;将服务器上需要的数据进行备份 2 安装从库的 MySQL&#xff0c;需要与主服务器的版本保持一致 3 将主服务器上的数据同步到从库中(主从集…

MySQL数据库主从集群架构搭建

一、相关概念 二、配置一主一从 三、配置一主多从 四、配置主从从 五、配置主主结构 六、配置半同步复制模式 一、相关概念 1.1 主从同步介绍&#xff1a; 存储数据的服务结构&#xff0c;分为2种角色&#xff1a; 主服务器(master)&#xff1a;接受客户端访问连接 从服务器(sl…

谈谈mysql数据库集群

现在&#xff0c;随着上网人数的激增&#xff0c;一些大型的网站开始使用数据库集群来提高数据库的可靠性和数据库的性能。那么在介绍数据库集群之前首先需要弄清楚几个问题。 1.为什么要用数据库集群 &#xff08;1&#xff09;通过使用数据库集群可以使读写分离&#xff0c;提…