Flyway 是一个开源的 数据库版本管理与迁移工具,通过可控的脚本和命令确保数据库结构随代码一致演进。
1. 项目概况
Flyway 是一个 开源的数据库迁移与版本控制工具,最初由 Boxfuse 开发,目前由 Redgate 维护。
它的核心目标是:让数据库结构的变更像应用代码一样可追溯、可回滚、可持续交付。
项目地址:https://github.com/flyway/flyway.git
2. 核心特性
- 数据库版本管理:通过命名规则(如
V1__init.sql、V2__add_user_table.sql)来标识版本。 - 支持多种数据库:PostgreSQL、MySQL、MariaDB、Oracle、SQL Server、SQLite、DB2、H2、Snowflake 等。
- 可重复迁移:支持
R__前缀脚本,适合视图、存储过程等对象的重复执行更新。 - 多种执行方式:命令行工具、Java API、Maven/Gradle 插件、Spring Boot 自动集成。
- 安全与可追踪:在数据库中自动维护一张
flyway_schema_history表,记录所有执行过的迁移。 - 跨环境一致性:保证开发、测试、生产环境的数据库 schema 一致,避免“环境不一致”问题。
3. 工作流程
编写迁移脚本:
- SQL 方式:直接写
.sql文件。 - Java 方式:编写 Java migration class。
命名规则
V1__init.sql(版本迁移脚本)R__refresh_views.sql(可重复迁移脚本)
执行迁移:运行 flyway migrate,Flyway 会自动检测未执行的迁移脚本并按顺序运行。
历史记录管理:迁移执行情况会被写入 flyway_schema_history 表,用于回溯与校验。
4. 应用场景
- DevOps & CI/CD:数据库迁移脚本与应用代码一起纳入版本控制,实现持续交付。
- 微服务架构:每个服务独立管理自己的数据库演进。
- 团队协作开发:避免人工手动更新数据库造成的不一致和遗漏。
- 合规审计:通过历史表追踪每次数据库变更,满足审计需求。
5. 生态与扩展
- 与 Spring Boot 无缝集成(启动时自动执行迁移)。
- 支持 Docker 镜像,方便在容器化环境中部署。
- 提供 社区版(开源) 与 企业版(付费),企业版增强了 Web UI、团队协作和安全特性
总之:Flyway = 数据库的 Git,它让数据库迁移像代码一样可管理、可持续交付,是 DevOps 环境下常用的数据库演进工具。
Flyway 的设计非常实用。它用一套规范的版本化脚本,让变更重复执行没问题,历史可查。它也能融入常见的 CI CD 流程,把数据库迁移变成流水线的一环。社区版可以直接在 GitHub releases 找到,下载解压后,运行 flyway.cmd 或者 flyway 就能看帮助。
Flyway 不会替你写业务,但能把那些重复、易错的变更交给工具。如此一来,数据库迁移要走向标准化和自动化。对企业级系统来说,这一步很重要,升级不再靠运气。未来要是更多团队把迁移脚本和代码放一起,再配上流水线,出现问题的概率会大幅下降。
一套可靠的迁移工具,其价值远超临时修复漏洞的短期努力。
宁可花心思搞好迁移工具,也比临时救火修 bug 更划算。