Jak cofnąć migracje za pomocą Flyway?
Migracje MyBatis dzielą każdy plik SQL na dwie sekcje:
- One for migration forward one version
- jeden do migracji z powrotem jednej wersji
Jak można cofnąć wersje używającFlyway ?
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!
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.
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)
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.)
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