Generowanie skryptu migracyjnego schematu bazy danych

W raz z kolejną edycją konkursu Mat2Tab pojawiło się oczywiście kilka zmian w formularzu zgłoszeniowym oraz całkowicie kilka nowych wymagań. Co więcej okazało się, że moja baza danych została lekko przeprojektowana. No cóż podobno człowiek najlepiej uczy się na błędach.

Przyszła potrzeba kilku zmian. Usunięcie kilku tabelek pośredniczących zmiana kluczy obcych. Pozmieniałem bazę za pomocą PHPMyAdmin. Jetem troszkę leniwy i nie chciało mi się pisać skrypty w SQL, który by to zmodyfikował. Okazało się, że jest problem, bo aby zastosować te zmiany na bazie produkcyjnej muszę mieć ten skrypt albo robić wszystko ręcznie jeszcze raz. Na pewno w późniejszym etapie będzie jeszcze kilka drobnych zmian w bazie. Docelowo chciałbym zautomatyzować wdrążenia, więc przydało by się jakieś fajne narzędzie do automatycznego generowania skryptu migracyjnego.

Dlaczego nie korzystam od początku z jakiegoś ORM obsługującego migracje?

Ponad 3 lata temu gdy zaczynałem pracę nad systemem „Coms”, który miał obsługiwać ten konkurs postawiłem na framework Kohana PHP i jego wbudowany dość prosty ORM. Dziś wiem, że nie było to najlepszy wybór. Na szczęście ta wersja aplikacji ma obsługiwać jeszcze tylko jedną edycję konkursu. Ruszam z gruntownym przepisaniem całości. Porzucam PHP i stawiam na .NET. Nowa wersja powstanie w ASP.NET Core i mam nadzieję, że do momentu wdrążenia wyjdzie stabilna wersja.

Czego oczekuję od narzędzia do generowania skryptu migracyjnego?

  1. Najlepiej gdyby było to narzędzie konsolowe
  2. Wygeneruje mi DROP, CREATE, CONTRAINT, ALTER
  3. W parametrach programu wskażę bazę docelową oraz bazową, a wyniku otrzymam SQL

Mogło by się wydawać, że wymagania nie są zbyt wygórowane a jednak jest z tym problem.

Spędziłem cały wieczór aby przetestować kilka narzędzi, które wyrzucił mi google. Pozwolę sobie na kilka słów komentarza do każdego z nich.

  1. MySql Workbeanch – W głównym GUI tego narzędzia jest opcja migracji bazy danych, jednak nie robi to diffa a po prostu przenosi bazę z jednego serwera na drugi. Próbowałem poprzestawiać różne opcję jednak nie jest on wstanie wygenerować skryptu, który zmodyfikowałby jedną bazę by wyglądało jak druga.
  2. Kolejne oficjalne narzędzie – MySql Utilies i polecenie mysqldbcompare. Moje pierwsze wrażenie to „Kurna czemu to jest tak spieprzone”. Może to wina Windowsa ale konsola, którą dostarczyli jest tragiczna. Nie da się z niej korzystać, żeby zmodyfikować polecenie trzeba je edytować w notatniku i wkleić gotowca. Błędy, które nic nie mówią to kolejna wada tego programu. Mimo, że udało się uzyskać jakieś pojedyncze strzępki SQL to korzystanie z tego narzędzia jest tak upierdliwe, że nie polecam go nikomu. Dokumentacja nie zachwyca dużo tekstu i mało konkretów. Nie, dziękuje.
  3. Na koniec skrypt w PHP – mysql-diff  to bardzo proste narzędzie, stworzenie przez jednego programistę i jak się okazuje potrafiące najwięcej z wymienionych wyżej. Dokumentacja jest prosta i przejrzysta. Radzi sobie prawie ze wszystkim oprócz kluczy obcych. Niestety mimo, że jest świetnym narzędziem to ten szczegół je dyskwalifikuje.

Na oku mam jeszcze dwa programy do testów. http://search.cpan.org/dist/MySQL-Diff/bin/mysqldiffhttp://www.sqlmanager.net/en/products/mysql/dbcomparer/screenshots/1893

Podsumowanie

Na razie poświęciłem kilka godzin na znalezienie odpowiedniego narzędzia. Musi istnieć coś co spełni moje wymagania. Jednak po dotychczasowych doświadczeniach skupie się jednak na projektach rozwijanych na githubie. Jakoś te oficjalne narzędzia nie dają rady albo „po prostu nie umiem z nich korzystać”. Jeżeli jesteś w stanie polecić kawałek kodu, który rozwiąże mój problem daj znać w komentarzach. Dzięki.

 

 

 

2 thoughts on “Generowanie skryptu migracyjnego schematu bazy danych

  1. Emi

    Grammar Nazi here… „Po za” => „Poza”, nie wygląda też dobrze zaczynanie zdania od „Bo, „, „Ponieważ, „. Jest do tego jeszcze kilka literówek. Wszystko to razem sprawiło, że niestety nie za bardzo mogłam skupić się na treści samego posta… Proponuję następnym razem dać szkic do przeczytania jednej, losowej osobie. Takie świeże spojrzenie potrafi wyłapać sporo błędów, których będąc autorem możemy nie zauważyć. 🙂

    • Sebastian Czarnecki

      Dzięki za wskazanie błędów i wskazówkę 🙂

Comments are closed.