![350bd07bf6c798bbd6453e433c029a9c.png](https://img-blog.csdnimg.cn/img_convert/350bd07bf6c798bbd6453e433c029a9c.png)
背景
在软件开发的过程中,开发人员都会使用版本控制系统来管理我们的代码,例如目前最流行的 Git。为什么要使用版本控制系统呢?
- 保存代码的历史版本、改动记录,实现代码的备份;
- 解决协同开发过程中不同开发人员代码冲突、版本回退的问题;
- 实现软件代码的持续集成、持续发布部署;
- 等等。
那大家有考虑过?每一次软数据库的变更也是需要做版本管理的,考虑以下这些问题:
- 多个环境下的数据库状态是否一致:比如在生产环境修复问题后,是否已经同步到开发环境,测试环境中;
- 如何获取某个环境中数据库的状态?某个 SQL 脚本是否已经执行过了?
- 一个新的环境,如何快速地设置你的数据库实例?
- 特定软件代码版本与数据库 Schema 的兼容问题怎么解决?
- 等等
这些问题可以通过 Schema migration[1] 或 Database migrations工具来解决,例如本文要讲的 Flyway[2] 。Flyway 是一个开源的数据库迁移工具,对 Java 生态支持得比较好,比如有 Java API,Maven plugin 和 Gradle plugin;好在它有命令行工具,迁移逻辑用 SQL 脚本写就行了,所以如果是 golang 生态一样可以用。
快速开始
本节将通过 Flyway 命令行工具来体验一下 Flyway,了解一下它的使用方法和工作原理。
前置工作
首先,下载并解压对应平台的 Flyway 社区版到本地,本人使用的环境是 macOS Big Sur + MySQL 5.7。