Files
blog-press/docs/Web/MySQL/Flyway.md
2026-05-20 11:26:38 +08:00

3.0 KiB
Raw Blame History

title, date
title date
Flyway简单使用 2025-11-27

一、简介

Flyway 是一个开源的数据库版本控制工具,它极大地简化了数据库的迁移和版本管理。它的核心思想是​​像用 Git 管理代码一样来管理数据库的结构​​。

二、原理

Flyway 通过在数据库中创建一个名为 flyway_schema_history的特殊表来工作

列名 含义
installed_rank 执行顺序
version 脚本的版本号
description 脚本的描述
type 脚本类型(通常是 SQL
script 脚本文件名
checksum 脚本文件的校验和(用于检测篡改)
installed_by 执行人
installed_on 执行时间
execution_time 执行耗时(毫秒)
success 是否成功

  工作流程:

  1. 应用启动时Flyway 会检查配置的数据库路径。
  2. 检查目标数据库中的 flyway_schema_history表。
  3. 将数据库路径下的迁移脚本与 flyway_schema_history表中的记录进行对比。
  4. 按照版本号​​顺序​​执行那些尚未执行的迁移脚本。
  5. 执行成功后,将记录插入 flyway_schema_history表。

2.1 校验和计算

Flyway 使用 CRC32 算法​​ 计算 SQL 脚本文件的校验和Checksum。Javs使用32位有符号整数存储因此有时会得到负数。可以通过mvn flyway:info查看每个脚本的校验和。

三、与SpringBoot集成

3.1 添加依赖

<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

3.2 配置数据源

spring:
  flyway:
    enabled: true
    locations: classpath:db/migration
    baseline-on-migrate: true # 如果数据库非空,且无 flyway_schema_history 表,则先创建基线版本

baseline-on-migrate: true当数据库已经存在数据但是没有flyway_schema_history表时Flyway会插入一条基线数据并标记为1.0版本则后续的迁移脚本只会执行比1.0版本更高的数据库文件。
如果设置为false如果数据库已经存在数据时Flyway会报错。
  因此需要避免这种情况的存在,在初始发布应用时,要保证数据库为空

3.3 创建数据库脚本

  在项目的资源目录 src/main/resources下创建文件夹 db/migration。
Flyway 的 SQL 脚本文件名有严格的命名规则:V<Version>__<Description>.sql
例如V1.0.0_001__20251027.sql表示v1.0.0版本的第一个sql日期为2025年10月27日。
创建了迁移脚本,一旦应用,就不可修改,否则会导致校验错误。如果确实要修改,请再创建一个脚本。

3.4 启动程序

启动程序后。Flyway会自动在数据库中创建flyway_schema_history表然后扫描db/migration目录下的所有脚本按顺序执行sql文件并记录到flyway_schema_history表中。