Flyway对数据库进行版本管理主要由Metadata表(默认是flyway_schema_history)和6种命令完成,Metadata主要用于记录每次执行的脚本和version等信息,下面一一介绍。
Metadata表(flyway_schema_history)
Flyway中最核心的就是用于记录所有版本执行结果和状态的Metadata表,在Flyway首次启动时会创建默认名为flyway_schema_history的元数据表,表结构如下(MySQL):
1. Migrate命令
将Schema Migrate到最新版本。如果flyway_schema_history不存在,Flyway将自动创建它。Migrate是Flyway工作流程的核心。它将扫描文件系统或类路径以获取可用的Migrate。它会将它们与已应用于数据库的Migrate进行比较。如果发现任何差异,它将Migrate数据库以缩小差距。Migrate最好应在应用程序启动时执行,以避免数据库与代码期望之间的任何不兼容性。
配置项:locations
2. Clean命令
清除掉对应数据库Schema中的所有对象。Clean对开发和测试有很大的帮助。通过彻底清除已配置的schemas,它将有效地为您提供一个全新的开始。所有对象(表、视图、过程等)都将被删除。注意:不要在生产环境使用
3. Info命令
打印所有Migrations的详细信息和状态信息。打印信息让你看到哪些Migrations已经应用,哪些迁移还在等待执行,何时执行,以及迁移是否成功。
4. Validate命令
验证已经Apply的Migrations是否有变更,Flyway是默认是开启验证的。Validate原理是对比Metadata表与本地Migrations的Checksum值,如果值相同则验证通过,否则验证失败,从而可以防止对已经Apply到数据库的本地Migrations的无意修改。
5. Baseline命令
Baseline是针对已经存在Schema结构的数据库的一种解决方案,即实现在非空数据库中新建Metadata表,并把Migrations应用到该数据库。Baseline可以应用到特定的版本,这样在已有表结构的数据库中也可以实现添加Metadata表,从而利用Flyway进行新Migrations的管理了。如果表中已经存在了Metadata表,那么baseline相关的配置无效。
主要配置有:
- baselineVersion
- baselineDescription
- table
6. Repair命令:修复Metadata表。
Repair是修复flyway_schema_history表的问题的工具。它有两个主要用途:
- 删除失败的迁移条目
- 将应用的迁移的校验和,描述和类型与可用的迁移重新对齐