Używamy czegoś podobnego do bcwoord, aby zsynchronizować nasze schematy bazy danych między 5 różnymi instalacjami (produkcyjnymi, przejściowymi i kilkoma instalacjami programistycznymi) oraz tworzyć kopie zapasowe w kontroli wersji i działa całkiem dobrze. Opowiem trochę:
Aby zsynchronizować strukturę bazy danych, mamy jeden skrypt, update.php i kilka plików o numerach 1.sql, 2.sql, 3.sql itd. Skrypt używa dodatkowej tabeli do przechowywania aktualnego numeru wersji Baza danych. Pliki N.sql są tworzone ręcznie, aby przejść z wersji (N-1) do wersji N bazy danych.
Mogą być używane do dodawania tabel, dodawania kolumn, migracji danych ze starego do nowego formatu kolumny, a następnie upuszczania kolumny, wstawiania "głównych" wierszy danych, takich jak typy użytkowników, itp. W zasadzie może zrobić wszystko i przy odpowiednich danych skrypty migracji nigdy nie stracisz danych.
Skrypt aktualizacji działa w następujący sposób:
- Połącz się z bazą danych.
- Zrób kopię zapasową bieżącej bazy danych (ponieważ materiał będzie pomylić) [mysqldump].
- Utwórz tabelę księgową (zwaną _meta), jeśli nie istnieje.
- Przeczytaj aktualną WERSJĘ z tabeli _meta. Załóż 0, jeśli nie zostanie znaleziony.
- Dla wszystkich plików .sql o numerach wyższych niż WERSJA, wykonaj je po kolei
- Jeśli jeden z plików spowodował błąd: przywróć kopię zapasową
- W przeciwnym razie zaktualizuj wersję w tabeli księgowej do najwyższego wykonanego pliku .sql.
Wszystko podlega kontroli źródła, a każda instalacja zawiera skrypt do aktualizacji do najnowszej wersji za pomocą jednego wykonania skryptu (wywołanie update.php z odpowiednim hasłem do bazy danych itp.). SVN aktualizuje środowiska pomostowe i produkcyjne za pomocą skryptu, który automatycznie wywołuje skrypt aktualizacji bazy danych, więc aktualizacja kodu obejmuje niezbędne aktualizacje bazy danych.
Możemy również użyć tego samego skryptu do odtworzenia całej bazy danych od podstaw; po prostu upuszczamy i ponownie tworzymy bazę danych, a następnie uruchamiamy skrypt, który całkowicie zapełni bazę danych. Możemy również użyć skryptu do wypełnienia pustej bazy danych w celu automatycznego testowania.
Skonfigurowanie tego systemu zajęło tylko kilka godzin, jest koncepcyjnie prosty i każdy otrzymuje schemat numerowania wersji, a możliwość rozwijania projektu bazy danych bez konieczności komunikowania się lub ręcznego wykonywania modyfikacji była nieoceniona. we wszystkich bazach danych.
Uważaj jednak podczas wklejania zapytań z phpMyAdmin! Te wygenerowane zapytania zwykle zawierają nazwę bazy danych, której na pewno nie chcesz, ponieważ spowoduje to uszkodzenie skryptów! Coś w rodzaju CREATE TABLE mydb
. newtable
(...) zakończy się niepowodzeniem, jeśli baza danych w systemie nie nosi nazwy mydb. Stworzyliśmy hak SVN przed komentarzem, który nie zezwala na pliki .sql zawierające mydb
ciąg znaków, co jest pewnym znakiem, że ktoś skopiował / wkleił z phpMyAdmina bez odpowiedniego sprawdzenia.