Flyway 命令
Flyway 是一个强大的数据库版本控制工具,支持通过命令行工具来管理数据库迁移。Flyway 的命令行工具提供了一系列实用的命令,帮助开发人员和运维人员方便地执行数据库迁移、回滚、验证等操作。通过这些命令,Flyway 可以自动管理数据库的结构变化,使数据库版本化,确保不同环境下数据库状态的一致性。
1. Flyway 安装和配置
在使用 Flyway 命令行工具之前,首先需要安装 Flyway。Flyway 支持多种操作系统,并提供了简单的安装方式。
1.1 下载与安装
可以从 Flyway 官网 下载 Flyway 的命令行工具包。
下载完成后,将工具包解压到任意目录。例如在 macOS 或 Linux 上,可以执行以下命令:
wget https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/8.5.13/flyway-commandline-8.5.13-linux-x64.tar.gz
tar -xzf flyway-commandline-8.5.13-linux-x64.tar.gz
在 Windows 系统上,解压后通过 cmd
或 PowerShell 进入解压目录。
1.2 配置环境变量
为了方便在命令行中使用 Flyway,可以将 Flyway 的执行路径添加到系统的 PATH
环境变量中。
例如在 macOS 或 Linux 系统中,编辑 .bashrc
或 .zshrc
文件,添加以下内容:
export PATH=/path/to/flyway:$PATH
保存并执行 source .bashrc
使配置生效。
在 Windows 系统中,可以通过 系统属性 -> 高级系统设置 -> 环境变量
来添加 Flyway 路径到 PATH
。
1.3 配置文件
Flyway 需要数据库连接信息才能工作,可以在 Flyway 目录下的 conf/flyway.conf
文件中进行配置:
flyway.url=jdbc:mysql://localhost:3306/mydb
flyway.user=root
flyway.password=yourpassword
flyway.locations=filesystem:sql/migrations
flyway.url
:数据库连接 URL。flyway.user
:数据库用户名。flyway.password
:数据库密码。flyway.locations
:迁移文件的存储位置,默认是filesystem:sql/migrations
,即 Flyway 安装目录下的sql/migrations
文件夹。
2. Flyway 常用命令
Flyway 提供了多个命令,用于管理数据库迁移操作。常用的命令包括 migrate
、clean
、info
、validate
、baseline
、repair
等。
2.1 flyway migrate
—— 执行迁移
migrate
命令是 Flyway 最重要的命令,用于执行所有未执行的迁移文件,更新数据库的结构。每当有新的迁移文件被添加,migrate
命令会按照版本顺序依次执行这些文件中的 SQL 或 Java 逻辑。
命令格式:
flyway migrate
执行后,Flyway 会扫描 locations
指定的目录,检查哪些迁移文件尚未执行,并依次执行它们。执行完成后,Flyway 会将这些迁移记录存储在 flyway_schema_history
表中。
应用场景:
- 在开发过程中,每次有新的数据库变更时,可以通过
migrate
命令将变更应用到当前环境的数据库中。 - 在部署到生产环境之前,通过
migrate
将最新的数据库版本应用到生产数据库。
2.2 flyway clean
—— 清空数据库
clean
命令用于清空数据库中的所有表、视图、存储过程、触发器等对象,将数据库恢复到一个干净的状态。它适用于测试环境中频繁重置数据库的场景。
命令格式:
flyway clean
执行该命令后,Flyway 会删除数据库中的所有对象,包括 Flyway 自己的 flyway_schema_history
表。
注意:clean
命令会永久删除数据库中的所有数据和结构,不能在生产环境中使用。
应用场景:
- 在开发或测试环境中,频繁变更数据库结构时,通过
clean
命令重置数据库。 - 在做大量迁移测试时,使用
clean
清除所有历史记录和数据。
2.3 flyway info
—— 查看迁移信息
info
命令用于查看当前数据库的迁移状态。它会显示所有的迁移文件,包括哪些文件已经执行,哪些文件尚未执行,以及每个迁移文件的执行时间、状态等。
命令格式:
flyway info
执行后,Flyway 会输出一张表,显示所有迁移的详细信息。例如:
+-----------+---------+---------------------+----------+---------------------+---------+
| Category | Version | Description | Type | Installed On | State |
+-----------+---------+---------------------+----------+---------------------+---------+
| Versioned | 1 | Create user table | SQL | 2024-09-08 12:34:56 | Success |
| Versioned | 2 | Add email column | SQL | 2024-09-08 12:35:12 | Success |
| Pending | 3 | Add index to email | SQL | | Pending |
+-----------+---------+---------------------+----------+---------------------+---------+
应用场景:
- 在执行迁移之前,使用
info
命令检查当前数据库的状态,确认哪些迁移已经成功,哪些尚未执行。 - 排查迁移执行中的问题,查看具体的错误信息。
2.4 flyway validate
—— 验证迁移文件
validate
命令用于验证迁移文件的完整性,确保已经执行过的迁移文件没有被修改,且所有待执行的迁移文件都是有效的。
命令格式:
flyway validate
执行后,Flyway 会检查所有迁移文件的校验和(Checksum),如果某个已经执行过的文件被修改,Flyway 会报错并提示有潜在的数据库不一致问题。
应用场景:
- 在执行新的迁移之前,使用
validate
确保所有迁移文件的版本和内容都是一致的。 - 作为 CI/CD 流水线的一部分,自动验证迁移文件的完整性,确保没有手动修改迁移文件的错误。
2.5 flyway baseline
—— 创建基准点
baseline
命令用于为已有的数据库创建一个基准点,以便将 Flyway 引入到已经存在的数据库中。执行 baseline
后,Flyway 会将当前数据库的状态标记为某个版本,并从该版本开始应用后续的迁移。
命令格式:
flyway baseline
可以通过 flyway.baselineVersion
配置来指定基准点的版本号,默认是 1
。
flyway baseline -baselineVersion=2
应用场景:
- 已有一个运行中的数据库,但数据库版本管理未使用 Flyway,可以通过
baseline
命令将当前数据库状态作为基准点,并在之后使用 Flyway 进行版本控制。
2.6 flyway repair
—— 修复历史记录
repair
命令用于修复 flyway_schema_history
表中的记录。它会重新计算已经执行的迁移文件的校验和,并删除任何失败的迁移记录。
命令格式:
flyway repair
在某些情况下,迁移可能因为某些错误(如网络问题或数据库连接中断)而失败,此时可以使用 repair
命令来修复这些记录。
应用场景:
- 数据库迁移过程中,某些迁移因为网络中断或其他问题而导致失败,可以通过
repair
来修复迁移记录。 - 当需要手动修改迁移记录时,使用
repair
重新校验和修复数据。
2.7 flyway undo
—— 回滚迁移
undo
命令用于撤销已经执行的迁移,恢复数据库到之前的版本状态。Flyway 支持为每个迁移文件编写相应的回滚脚本,以便在需要时撤销某次迁移。
命令格式:
flyway undo
应用场景:
- 在测试或开发环境中,当发现某个迁移存在问题时,可以通过
undo
撤销这次迁移的更改。
3. 其他命令
除了上述常用命令,Flyway 还提供了一些其他命令,如:
flyway clean
:清空数据库。flyway migrate
:执行所有未执行的迁移。flyway info
:查看当前数据库的迁移状态。
4. 常见的命令组合
在实际项目中,开发者经常会组合使用多个 Flyway 命令,以确保数据库的状态正确。例如:
-
迁移前检查:
flyway validate && flyway migrate
先通过
validate
确保所有迁移文件的有效性,然后通过migrate
执行迁移。 -
迁移失败后的修复:
flyway repair && flyway migrate
通过
repair
修复迁移记录,然后重新执行迁移。
5. 命令行参数与配置文件
Flyway 命令支持通过配置文件或命令行参数传递数据库连接信息和其他配置。常见的参数包括:
-url
:指定数据库的 URL。-user
:指定数据库用户名。-password
:指定数据库密码。-locations
:指定迁移文件的路径。
例如,直接通过命令行参数传递数据库连接信息:
flyway -url=jdbc:mysql://localhost:3306/mydb -user=root -password=yourpassword migrate
结论
Flyway 提供了一系列强大的命令行工具,用于执行、验证、回滚和修复数据库迁移。通过这些命令,开发人员可以轻松管理数据库的版本化变更,确保数据库结构在不同环境中的一致性和稳定性。Flyway 命令行工具不仅简单易用,还支持灵活的配置,使其成为企业级项目中不可或缺的数据库管理工具。