Jak cofnąć migracje za pomocą Flyway?

Migracje MyBatis dzielą każdy plik SQL na dwie sekcje:

  1. One for migration forward one version
  2. jeden do migracji z powrotem jednej wersji

Jak można cofnąć wersje używającFlyway ?

Author: Axel Fontaine, 2011-02-10

4 answers

Znaleziono odpowiedź w FAQ:

A co ze skryptami downgrade/MIGRACJAMI W Dół?

Flyway nie obsługuje skryptów downgrade.

Chociaż idea skryptów downgrade (spopularyzowanych przez Rails Migrations) jest fajna w teorii, niestety psuje się w praktyce. Jak tylko pojawią się destrukcyjne zmiany (drop, delete, truncate, ...), zaczynasz wpadać w kłopoty. A nawet jeśli nie, w końcu tworzysz domową alternatywy do przywracania kopii zapasowych, które również muszą być odpowiednio przetestowane.

Skrypty Downgrade zakładają, że cała migracja nie powiodła się.

Migracja może się nie udać w dowolnym momencie. Jeśli masz 10 stwierdzeń, możliwe jest, że 1., 5., 7. lub 10. nie powiedzie się. Po prostu nie ma sposobu, aby wiedzieć z góry. Skrypty Downgrade są pisane w celu cofnięcia całej migracji. To czyni je efektywnie bezużytecznymi, nawet dla nieniszczących zmian.

Zachowaj kompatybilność wsteczną między bazą danych a wszystkimi wersjami kodu aktualnie wdrożonego w produkcji.

W ten sposób nieudana migracja nie jest katastrofą. Stara wersja aplikacji jest nadal kompatybilna z DB, więc można po prostu cofnąć kod aplikacji, zbadać i podjąć działania naprawcze.

Znacznie lepszym rozwiązaniem jest odpowiednia, dobrze przetestowana strategia tworzenia kopii zapasowych i przywracania.

Jest niezależna od struktura bazy danych, a po przetestowaniu i sprawdzeniu jej działania żaden skrypt migracyjny nie może jej złamać. Aby uzyskać optymalną wydajność, a jeśli twoja Infrastruktura to obsługuje, zalecamy użycie technologii migawek podstawowego rozwiązania pamięci masowej . Szczególnie w przypadku większych ilości danych, może to być o kilka rzędów wielkości szybciej niż tradycyjne kopie zapasowe i przywracanie!

 72
Author: Gili,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-16 17:02:52

Jest to obsługiwane od Flyway 5.0. Niestety jest to tylko funkcja komercyjna.

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

 4
Author: user2248785,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 09:24:13

Zakładam, że potrzebujesz strategii wycofywania, gdy np. partner zawiedzie na etapie produkcji, a jego wdrożenie jest niezbędne do wydania.

Możesz tak nazwać swoje skrypty SQL flyway:
V.000_ .sql

Teraz możesz odejść
V.998_rollback.sql for rollback
I make V.999_reenroll.sql to reenroll.

W Twoim środowisku CI / CD potrzebujesz jeszcze 2 Zadań (uruchamiane ręcznie) po zadaniu wdrożenia. Jeden dla rollback, który uruchamia proces rollback, w tym flyway migrate. Inne na reenroll.
Musisz tylko zadbać o konfigurację celu w flyway.
Dla Twojego zadania wdrożenia twoim celem powinno być .997
Dla Twojego zadania rollback .998

Po uruchomieniu nowego wydania upewnij się, że nie uruchomisz skryptu wycofywania/ponownego przewijania starego wydania.

Jak powiedział wcześniej dobrze przetestowany, zalecanym rozwiązaniem jest strategia tworzenia kopii zapasowych i przywracania.

(sry for bad english)

 0
Author: ndueck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-19 21:08:47

Znalazłem najlepszy sposób, aby to zrobić, to po prostu wyczyścić bazę danych i przenieść naprzód do konkretnej wersji, do której chcesz wrócić.

Jak sugeruje FAQ Skrypty rollback są ładne w teorii, ale niektórych migracji po prostu nie można cofnąć. (np. jeśli tabela zostanie upuszczona, przywrócenie tabeli DDL jest łatwe, ale przywrócenie zawartych w niej danych może być trudne.)

 -3
Author: Ben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 15:45:46