Как откатить миграцию с помощью Flyway? - PullRequest
50 голосов
/ 10 февраля 2011

Миграции MyBatis разбивают каждый файл SQL на два раздела:

  1. Один для перехода вперед на одну версию
  2. Один для перехода назад на одну версию

Как откатить версии, используя Flyway ?

Ответы [ 4 ]

74 голосов
/ 10 февраля 2011

Хотя Flyway поддерживает откат (в качестве коммерческой функции), его использование не рекомендуется:

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

Хотя идея отмены миграции хороша, к сожалению, иногдаломается на практике.Как только у вас появятся деструктивные изменения (удаление, удаление, усечение,…), у вас начнутся проблемы.И даже если вы этого не сделаете, вы в конечном итоге создадите самодельные альтернативы для восстановления резервных копий, которые также должны быть надлежащим образом протестированы.

Отмена миграции предполагает, что вся миграция прошла успешно и теперь должна быть отменена.Это не помогает при сбоях версионных миграций в базах данных без транзакций DDL.Зачем?Миграция может потерпеть неудачу в любой момент.Если у вас есть 10 утверждений, возможно 1-е, 5-е, 7-е или 10-е не получится.Просто нет возможности узнать заранее.Напротив, отмена миграций написана для отмены всей версионной миграции и не поможет в таких условиях.

Альтернативный подход, который мы считаем предпочтительным, заключается в поддержании обратной совместимости между БД и всеми версиями развернутого в данный момент кодав производстве.Таким образом, неудачная миграция не является катастрофой.Старая версия приложения по-прежнему совместима с БД, поэтому вы можете просто откатить код приложения, исследовать и принять корректирующие меры.

Это должно быть дополнено надлежащим, хорошо протестированным, резервным копированием и восстановлением.стратегия.Он не зависит от структуры базы данных, и как только он протестирован и доказал свою работоспособность, ни один скрипт миграции не сможет его сломать.Для достижения оптимальной производительности, и если ваша инфраструктура поддерживает это, мы рекомендуем использовать технологию моментальных снимков вашего базового решения для хранения данных.В особенности для больших объемов данных это может быть на несколько порядков быстрее, чем при традиционном резервном копировании и восстановлении.

8 голосов
/ 12 декабря 2017

Это поддерживается начиная с Flyway 5.0.К сожалению, это только коммерческая функция.

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

0 голосов
/ 15 сентября 2017

Я нашел лучший способ сделать это - просто очистить базу данных и перенести forward на конкретную версию, к которой вы хотели вернуться.

Как часто задаваемые вопросы показывают, что сценарии отката хороши в теории, но некоторые миграции просто не могут быть отменены. (например, если таблица удалена, восстановление таблицы DDL легко, но восстановление содержащихся в ней данных может быть затруднено.)

0 голосов
/ 19 октября 2015

Я полагаю, вам нужна стратегия отката, когда, например, партнер терпит неудачу на стадии производства, и его развертывание необходимо для вашего выпуска.

Вы могли бы назвать свои сценарии SQL flyway следующим образом:
V .000_ <описание> .sql

Теперь вы можете покинуть
V .998_rollback.sql для отката
и заставьте V .999_reenroll.sql для повторной регистрации.

В вашей среде CI / CD вам потребуется еще 2 задания (запускаемых вручную) после задания развертывания. Один для отката, который запускает процесс отката, включая миграцию по маршруту. Посмотри для зачисления.
Вам просто нужно позаботиться о целевой конфигурации на пролетном пути.
Для вашей работы по развертыванию ваша цель должна быть .997
Для задания отката .998

При запуске нового выпуска убедитесь, что вы не запустите сценарий отката / повторной регистрации старого выпуска.

Как уже говорилось ранее, хорошо проверенная стратегия резервного копирования и восстановления является рекомендуемым решением.

(извините за плохой английский)

...