You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring项目中Flyway undo命令失效,求助回滚失败迁移

解决Flyway失败迁移的回滚问题

问题背景

Spring项目使用Flyway Community Edition 9.8.1管理数据库迁移,因SQL列名拼写错误导致V5版本迁移失败。尝试执行flyway undo回滚时,提示该命令仅支持Flyway专有版本,无法执行。迁移历史显示版本5状态为Failed (Future)且Undoable = No。

命令执行报错

C:\Users\leonardo.freitas\Documents\workspace\api>C:\Users\leonardo.freitas\Documents\workspace\flyway-9.8.1\flyway undo
A new version of Flyway is available
Upgrade to Flyway 9.8.2: https://rd.gt/2X0gakb
ERROR: The command 'undo' was not recognized. Make sure you have added 'flyway-proprietary' as a dependency.
Caused by: No command extension found to handle command: undo

迁移历史

C:\Users\leonardo.freitas\Documents\workspace\api>C:\Users\leonardo.freitas\Documents\workspace\flyway-9.8.1\flyway info
A new version of Flyway is available
Upgrade to Flyway 9.8.2: https://rd.gt/2X0gakb
Flyway Community Edition 9.8.1 by Redgate
See what's new here: https://flywaydb.org/documentation/learnmore/releaseNotes#9.8.1

ERROR: Skipping filesystem location: sql (not found)
Database: jdbc:mysql://localhost:3306/volimed (MySQL 8.0)
Schema version: 5                                                                                                         
                                                                                                                          
+-----------+---------+----------------------------------------+------+---------------------+-----------------+----------+
| Category  | Version | Description                            | Type | Installed On        | State           | Undoable |
+-----------+---------+----------------------------------------+------+---------------------+-----------------+----------+
| Versioned | 1       | create-table-medicos                   | SQL  | 2022-11-19 03:12:19 | Future          | No       |
| Versioned | 2       | alter-table-medicos-add-telefone       | SQL  | 2022-11-19 13:32:45 | Future          | No       |
| Versioned | 3       | create-table-pacientes                 | SQL  | 2022-11-19 13:46:17 | Future          | No       |
| Versioned | 4       | alter-table-medicos-add-column-active  | SQL  | 2022-11-19 15:28:46 | Future          | No       |
| Versioned | 5       | alter-table-paciente-add-column-active | SQL  | 2022-11-19 15:45:28 | Failed (Future) | No       |
+-----------+---------+----------------------------------------+------+---------------------+-----------------+----------+

解决方案

Flyway Community版不支持undo命令,针对当前失败的迁移,按以下步骤处理:

1. 确认数据库实际状态

连接到MySQL的volimed数据库,检查paciente表是否已添加active列:

DESCRIBE paciente;

如果列不存在,说明迁移完全失败,无需手动回滚数据库变更;如果列存在,先执行删除列的SQL:

ALTER TABLE paciente DROP COLUMN active;

2. 修正Flyway元数据

Flyway的元数据表(默认是flyway_schema_history)中存在版本5的失败记录,需要删除该记录解除锁定:

DELETE FROM flyway_schema_history WHERE version = '5';

3. 修复迁移脚本错误

找到V5对应的SQL脚本(V5__alter-table-paciente-add-column-active.sql),修正列名拼写错误,确保SQL语句合法。

4. 重新执行迁移

运行Flyway迁移命令,重新执行修正后的脚本:

flyway migrate

补充说明

  • undo是Flyway Pro/Enterprise版的专属功能,Community版无法使用,无需尝试添加flyway-proprietary依赖(除非升级到付费版本)。
  • 后续建议在测试环境先验证迁移脚本,避免因语法错误导致生产环境迁移失败。

内容的提问来源于stack exchange,提问作者Léo Freitas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 05:42:10