如何使用 Flyway 回滚迁移?

2022-08-31 15:41:43

MyBatis 迁移将每个 SQL 文件拆分为两个部分:

  1. 一个用于向前迁移一个版本
  2. 一个用于迁移回一个版本

如何使用Flyway回滚版本?


答案 1

虽然 Flyway 支持回滚(作为仅限商业的功能),但不鼓励使用它:

https://flywaydb.org/documentation/command/undo

虽然撤消迁移的想法很好,但不幸的是,它有时会在实践中崩溃。一旦你有破坏性的改变(删除,删除,截断,...),你就会开始陷入困境。即使您不这样做,您最终也会创建用于还原备份的自制替代方案,这些替代方案也需要进行适当的测试。

撤消迁移假定整个迁移成功,现在应撤消。这无助于在没有 DDL 事务的数据库上失败的版本化迁移。为什么?迁移可能随时失败。如果您有 10 个语句,则第 1 个、第 5 个、第 7 个或第 10 个语句可能会失败。根本没有办法提前知道。相比之下,编写撤消迁移是为了撤消整个版本化迁移,在这种情况下无济于事。

我们认为更可取的另一种方法是保持数据库与当前在生产中部署的所有代码版本之间的向后兼容性。这样,失败的迁移就不会成为灾难。旧版本的应用程序仍与数据库兼容,因此您只需回滚应用程序代码、进行调查并采取纠正措施即可。

这应该得到一个适当的、经过充分测试的备份和恢复策略的补充。它独立于数据库结构,一旦经过测试并证明其有效,任何迁移脚本都不能破坏它。为了获得最佳性能,如果您的基础架构支持此功能,我们建议您使用基础存储解决方案的快照技术。特别是对于较大的数据量,这比传统的备份和恢复快几个数量级。


答案 2

自 Flyway 5.0 起,此功能一直受支持。可悲的是,这只是一个商业功能。

https://flywaydb.org/documentation/command/undo


推荐