0

0

SQL 数据库迁移工具 Flyway vs Liquibase 的版本管理与回滚能力对比

冰川箭仙

冰川箭仙

发布时间:2026-02-22 20:10:03

|

704人浏览过

|

来源于php中文网

原创

flyway不支持任意回滚,仅能通过新增逆向脚本实现有限回退;liquibase需在changeset中显式定义rollback逻辑,支持多种声明方式但依赖人工编写;二者均要求数据库处于干净状态,回滚非万能,须结合蓝绿发布等更可靠方案。

sql 数据库迁移工具 flyway vs liquibase 的版本管理与回滚能力对比

Flyway 的版本号是严格递增的,不支持任意回滚

Flyway 把迁移看作单向演进过程,flyway migrate 执行后,schema_version 表里只记录已应用的版本和状态,没有“回退逻辑”的存储位置。它默认不提供 flyway undo 或类似命令——这不是遗漏,而是设计取舍。

常见错误现象:flyway repair 被误当成回滚用;或手动删 schema_version 行再重跑,结果触发校验失败(checksum mismatch)。

  • 真正能用的“回退”只有:写一个新 V2__rollback_to_v1.sql 迁移脚本,显式执行逆向操作(比如 DROP COLUMN 改成 ADD COLUMN
  • 如果用了 flyway clean,必须确保数据库可清空——生产环境禁用
  • 社区版完全不支持 undo;Pro 版虽有 flyway undo,但要求所有迁移脚本带 undo 配对,且只支持上一个版本(不能跳回 V1 → V3)

Liquibase 的 rollback 命令依赖 changelog 中的 rollback 属性

Liquibase 默认也不自动保存反向操作,它的 rollback 能力不是开箱即用的,而是靠你在每个 changeSet 里显式声明怎么撤回。

使用场景:你改了表结构、插了测试数据、甚至调了存储过程,都得自己写清楚“怎么撤销”。否则 liquibase rollbackCount 1 会直接报错:Cannot rollback changeset: no rollback statement provided

大师兄智慧家政
大师兄智慧家政

58到家打造的AI智能营销工具

下载
  • 支持三种回滚方式:内联 <rollback>SQL</rollback>、引用 rollbackScript 文件、或用内置标签如 <dropcolumn></dropcolumn>(它自带逆操作)
  • rollback 不检查实际数据状态,只按 changelog 执行——如果中间有人手动改库,rollback 可能失败或产生脏数据
  • XML/YAML/JSON 格式都支持 rollback 定义,但 SQL 格式(.sql changelog)只能靠 --rollback 注释块,易被忽略或格式写错

两者对“重复执行”和“版本冲突”的处理逻辑完全不同

Flyway 靠文件名哈希值做校验,Liquibase 靠 id/author/filepath 三元组加 checksum。这导致它们在协作开发、分支合并、CI 重跑时出问题的方式不一样。

常见错误现象:开发 A 提交 V2__add_user_table.sql,开发 B 同时提交 V2__create_audit_log.sql —— Flyway 直接报错“duplicate version”,Liquibase 则可能让两个 V2 共存(只要 id 不同),但上线时顺序不确定,引发依赖错误。

  • Flyway 要求版本号全局唯一且递增,适合强管控流程;Liquibase 允许并行开发,但需要团队约定 authorid 规范
  • Flyway 的 repair 是为修复 checksum 不一致而设,不是为解决冲突;Liquibase 的 changelogSync 可把现有 DDL 记录为已执行,但不会生成 rollback
  • CI 环境中,Flyway 更怕“本地多跑一次”,Liquibase 更怕“changelog 文件被覆盖丢失 rollback 块”

回滚能力不等于线上故障恢复能力

不管是 flyway undo 还是 liquibase rollback,都假设数据库处于“干净迁移态”——没手工改过结构、没绕过工具插过数据、没跨版本跳迁。现实里这三个条件常不满足。

  • 真正高可用场景下,回滚只是兜底选项;更可靠的是蓝绿发布、影子表切换、或应用层兼容旧结构
  • Liquibase 的 rollback 脚本如果含 DELETE FROM,执行后无法还原数据;Flyway 的“重写 V2 为逆向 SQL”也一样不可逆
  • 所有回滚操作都应先在预发环境完整验证,尤其注意外键约束、索引失效、序列值偏移等隐性影响

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1006

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

335

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

379

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1802

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

377

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1354

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

437

2024.04.29

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.4万人学习

Pandas 教程
Pandas 教程

共15课时 | 1.1万人学习

ASP 教程
ASP 教程

共34课时 | 5.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号