当前位置: 首页 > news >正文

还在手动改数据库?Flyway 自动化迁移实战指南 - lxr

Flyway 操作文档

文档目标:

  1. 作为团队的规范文档,确保团队所有成员遵循相同的操作规范。
  2. 介绍 Flyway 相关的操作说明,包括编写 SQL 迁移脚本的规范、回滚策略等,确保团队在使用 Flyway 时的统一性和一致性。

Flyway 的引入与相关配置

在 Maven 中引入相应的模块:

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

application.yml 文件中添加以下配置:

flyway:enabled: truebaseline-on-migrate: trueclean-on-validation-error: falsesql-migration-prefix: Vsql-migration-suffixes: .sqllocations: classpath:db/migration

resources 目录下创建 db/migration 目录,存放迁移文件。

SQL 迁移文件的命名规范

Flyway 的 SQL 文件命名规则如下:

  • 文件名以大写字母 "V" 开头,后跟版本号(数字与 ._ 分隔),例如:V2.1.5__create_user_ddl.sql
  • 描述部分应尽量简洁明了,用双下划线分隔版本号和描述部分。
  • 可重复执行的 SQL 文件以 "R" 开头,如:R__truncate_user_dml.sql

命名规范示例:

版本号格式

  • 使用

    V<主版本号>.<次版本号>.<修订号>
    

    格式,例如:

    • V1.0.0:初始版本。
    • V1.1.0:引入新功能,保持向后兼容。
    • V1.1.1:修复 bugs 或小修改。
    • V2.0.0:重大更新,不兼容的变更。

命名示例:

  • V1.0.0__create_user_table.sql:初始化脚本,创建 user 表。
  • V1.1.0__add_email_column_to_user_table.sql:添加 email 列到 user 表。
  • V1.2.0__update_user_table_indexes.sql:更新 user 表的索引。
  • V2.0.0__create_product_table.sql:创建 product 表,作为重大版本更新。

Flyway 使用的最佳实践

  1. 所有数据库变更通过 Flyway 管理:无论是创建表、修改表结构,还是插入初始数据,都应该写成 Flyway 的迁移文件。例如:

    • 新建表:

      CREATE TABLE test (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL
      );
      
    • 修改表结构(添加列):

      ALTER TABLE test ADD COLUMN email VARCHAR(255) NOT NULL;
      
  2. 避免直接操作数据库:将 Navicat 等数据库操纵工具主要用于查看数据或调试,而不是直接修改表结构。在开发过程中,始终通过 Flyway 管理数据库变更,避免直接修改生产环境数据库。

  3. 规范迁移文件的编写:遵循 Flyway 的文件命名规则(如 V001__create_test_table.sql),并保持每个迁移文件只包含一次性、独立的变更。例如,一个文件只负责创建表,另一个文件只负责修改表结构。

  4. 数据库变更流程

    • 在开发环境中使用工具(如 Navicat)测试并确认数据库变更。
    • 将确认的变更记录到 Flyway 的 SQL 脚本中,并通过 Flyway 执行迁移。
    • 提交迁移文件到版本控制系统,确保其他环境(如测试环境、生产环境)能够通过 CI/CD 自动执行这些迁移。

Flyway 的回滚策略

我们遵循 Flyway 的核心设计理念:

  1. 迁移操作只向前推进:通过新的迁移脚本来修正错误或调整数据库结构,而不是撤销已经应用的迁移。
  2. 保留完整的迁移历史:所有变更(包括错误修正)都记录在 Flyway 的迁移文件和 schema_version 表中,以便追踪和审计。
  3. 数据保护优先:在执行迁移前,务必进行数据备份,防止因操作失误导致的数据丢失。

回滚实施流程

1. 确认问题
  • 分析迁移问题的范围和影响(如表、字段、约束、数据)。
  • 确定需要修正的内容以及对现有数据的影响。
  • 在开发环境中复现问题,确保完全理解问题的根源。
2. 编写新的迁移脚本
  • 命名规则:遵循 Flyway 的版本命名规范(如 V2__Fix_table_structure.sql)。
  • 脚本内容
    • 确保新的迁移脚本仅修改问题部分。
    • 如果需要删除表、字段或数据,建议使用备份表或临时表存储重要数据,避免丢失。
3. 在生产环境中的验证
  • 在生产环境之前,务必在开发或测试环境中验证回滚脚本,确保不会引发其他问题。

使用 Flyway 的注意事项

  1. 非项目初期引入 Flyway 的注意事项
    如果 Flyway 不是在项目初期引入,而是在数据库已有表的情况下引入时,必须设置 baseline-on-migrate: true。启动项目后,Flyway 会在数据库中创建 flyway_schema_history 表,并在表中插入一条版本为 1 的建表记录。如果迁移文件中存在以 V1__ 开头的文件,Flyway 会忽略该文件并避免执行,可能导致其他迁移数据出现问题。
  2. 及时备份 SQL 文件
    始终备份 SQL 脚本,避免在极端情况下丢失重要的数据库变更记录。
http://www.jsqmd.com/news/45716/

相关文章:

  • 2025年河北租用服务器公司权威推荐榜单:网站服务器租用/服务器主机租用/阿里云服务器租用源头公司精选
  • “入站规则”(Inbound Rules)和“出站规则”(Outbound Rules)
  • 毕业论文选题攻略:如何快速锁定高质量研究方向
  • 四川靠谱的小红书代运营公司推荐,小红书推广/网络推广/网络公关/抖音代运营/抖音推广/网络营销/网站建设小红书代运营公司找哪家
  • SQL Server Job 操作
  • 洛谷题单指南-组合数学与计数-CF1332E Height All the Same
  • Oracle 2025年1月关键补丁更新深度解析
  • 2025年合金热喷涂加工厂权威推荐榜单:耐腐合金涂层工艺/合金涂层加工/合金涂层喷涂工厂服务商精选
  • ESP32-LVGL 开发笔记(二):设备注册
  • 2025年成都火锅必吃榜TOP10,本地人强推!美食/地摊火锅/附近火锅/重庆火锅/牛肉火锅/成都火锅/老火锅/社区火锅/火锅品牌排行榜单
  • 高松灯和大石头的故事
  • 2025 11月 易上手建站工具指南:实用性和难点解决分析
  • 同样都是36岁,同样都是面临人生的抉择,《岁月》中的梁志远放下清高觉醒了,我呢,如何在社会这个大染缸里面混呢?
  • 2025 年 11 月冲压机械手厂家推荐排行榜,冲床机械手/摆臂机械手/二次元拉伸/三次元冲压/模内平移/多工位冲压/四轴上下料/自动拆垛/新能源电池壳拉伸/双臂机械手/全自动码垛机厂家精选
  • 2025年EVA废料优质厂家权威推荐榜单:EVA造粒/EVA颗粒/EVA再生造粒料源头厂家精选
  • 2025 初中一对一教育机构口碑排名:高性价比靠谱名单 + 权威测评排行榜
  • C#AI系列(1):深度学习项目构建及实战TensorFlow准备篇
  • 详细介绍:2026计算机毕业设计课题推荐
  • 【PCIE725G 】基于 PCIe x16 总线架构的 JFM9VU9P FPGA 高性能数据预处理平台(100%国产化)
  • 2025年疏浚船优质厂家权威推荐榜单:绞吸船/挖沙船/清淤船源头厂家精选
  • 2025 年 11 月高温老化房厂家推荐排行榜,老化室/高温房/熟化房/固化房/恒温恒湿室/恒温房,专业定制与稳定性能深度解析
  • PG优化系列:Oracle迁移到PG中性能下降1000倍续集
  • ORACLE故障恢复:启用与禁用事务的并行恢复
  • 基于SIC8F1233开发智能充气泵方案
  • ESD整改核心思路:堵、防、疏的实践平衡-ASIM阿赛姆
  • 2025 最新瓷砖品牌权威推荐:经国际协会测评认证,精选品质与创新兼具的优质品牌
  • Qiling使用速记
  • 保温杯LED屏幕驱动和语音播报二合一芯片方案
  • B端界面设计之流程页设计——从“能用”到“好用”的边界重构
  • 2025 靠谱初中一对一辅导机构排行榜:权威评价 + 真实口碑排名推荐