Flyway:一款免费开源的数据库变更管理工具
Flyway 是一个开源的数据库迁移(Database Migration)工具,致力于简化数据库的版本控制和变更管理。
项目源代码托管在 GitHub,目前获得了 9.1K Stars:
https://github.com/flyway/flyway
工作原理
我们从最简单的场景开始,第一次针对一个数据库运行 Flyway 时:
Flyway 无法找到记录数据库变更的模式历史表(flyway_schema_history),因此会进行初始化创建。
然后 Flyway 会扫描指定的代码目录或者应用程序的 classpath,按照文件命名版本号运行其中的 SQL、Java 或者其他语言脚本,进行数据库结构变更。
与此同时会在模式历史表中记录已经运行过的脚本:
有了这些记录之后,当应用程序按照命名规则增加新的变更脚本时,Flyway 可以知道哪些文件还没有被运行,哪些文件不再需要运行:
执行新的数据库变更之后,在模式历史表中的记录也会同步更新:
不断重复以上过程就可以实现基于版本的数据库变更管理了。
功能特性
Flyway 通过一系列规范的版本化脚本,使得数据库结构的变更能够实现可重复、可追溯和自动化部署,完美地融入了现代应用的持续集成和持续交付(CI/CD)流程。
-
跨平台:基于 Java 开发,支持 Windows、macOS、Linux 以及 Docker 部署。
-
多数据库: 支持各种数据库,包括 MySQL、PostgreSQL、Azure Synapse、Clickhouse、CockroachDB、Databricks、DB2、Derby、Firebird、BigQuery、Google Cloud Spanner、H2、HSQLDB、Informix、MariaDB、MongoDB、MySQL、Oracle、Redshift、SAP HANA、SingleStoreDB、Snowflake、SQLite、SQL Server、Sybase ASE、TiDB、TimescaleDB、YugabyteDB 等。
-
简单易用:只需编写标准的 SQL 脚本,按照约定的规则命名,Flyway 就会自动处理。
-
版本控制: 数据库脚本和应用程序代码一样,可以纳入版本控制系统(例如 Git),方便协作和追溯每一次变更。
-
自动化:完美集成 CI/CD 流水线,应用启动时或构建过程中可以自动执行数据库迁移,无需人工干预。
-
可靠性:迁移操作通常在数据库事务内进行(可以配置),保证迁移的原子性,数据库不会停留在中间状态。
-
多种使用方式:提供了命令行工具 (Flyway CLI)、API、Maven/Gradle 插件、Spring Boot 集成等方式,满足不同场景的需求。
产品版本
Flyway 提供了免费的社区版和支持更多功能的企业版,两者的区别如下:
下载安装
Flyway 社区版下载网址如下:
https://github.com/flyway/flyway/releases
下载完成后解压即可,运行 flyway.cmd 或者 flyway 查看命令帮助: