https://www.toutiao.com/article/7548373908005732918/
早年大家改数据库,靠一堆 SQL 文件。运维拷来拷去,版本混乱。逻辑靠人记。回滚靠祈祷。那种场景,老项目尤其常见。Flyway 就冲着这点来的。它把数据库变更当成代码来管。第一次对着一个库跑 Flyway,它没找到 flyway_schema_history,就主动建表。接着它会扫描你放脚本的目录和 classpath,按文件名的版本号去跑 SQL 或 Java 脚本。每跑一个脚本,它就在那张表里记一笔。下次你再加新脚本,Flyway 能立刻知道哪些已跑过,哪些还没跑。照着这样的流程反复跑,数据库变更就有了可追溯的版本历史,不会再靠人脑记忆。
我亲眼见过一个团队,改表前后两天内反复发版。后来他们把迁移脚本放到代码仓库,交给 Flyway 来跑。发版速度稳了,出错少了。这一来最开心的就是运维和测试,问题少了,通宵少了。
Flyway 的设计很简单也很实用。它用一套规范的版本化脚本,让变更重复执行没问题,历史可查。它也能融入常见的 CI CD 流程,把数据库迁移变成流水线的一环。项目有社区版和企业版两种,社区版免费,企业版功能更多。社区版可以直接在 GitHub releases 找到,下载解压后,运行 flyway.cmd 或者 flyway 就能看帮助。
现场感说一下,开发到交付的那段很关键。你把脚本按命名规则丢进去,CI 一跑,Flyway 会先检查历史表,缺哪个脚本就补哪个。运维那边只要看一张表,就知道当前库运行到哪个版本了。出差错时,回滚逻辑也清楚,是记录在表里的,不是发邮件去问谁改了什么。
我看到的局面是,靠规则的人越来越多。Flyway 不会替你写业务,但能把那些重复、易错的变更交给工具。照这个趋势,数据库迁移要走向标准化和自动化。对企业级系统来说,这一步很重要,升级不再靠运气。未来要是更多团队把迁移脚本和代码放一起,再配上流水线,出现问题的概率会大幅下降。
我个人看法是,一套靠谱的迁移工具,比临时拼命修 bug 更值钱。你要的是稳定和可控,不是在晚上修表情绪崩溃。Flyway 做的,就是把变更变得有序。要不要用,取决于你愿不愿意把数据库当成代码来管。