Rozwiązanie do kontroli wersji bazy danych i wdrażania?

11

Obecnie używam skryptu zrzutu i zatwierdzam bazę danych do repozytorium git. --skip-extended-insert --skip-comments --skip-dump-dateoznacza, że ​​diff może dać mi dobre wyobrażenie o tym, co się zmieniło, ale wszystko spada, jeśli próbuję się połączyć.

WP_SITEURL, WP_HOME i wszystkie inne miejsca Wordpress przechowuje pełne adresy URL wymagają aktualizacji podczas importowania na inny host (testowanie, inscenizacja, produkcja)

Czy ktoś używa lepszej metody?

Główne kwestie:

  • Wordpress przechowuje pełne adresy URL w całej bazie danych (nieprzenośne)
  • Wiele innych, nieistotnych zapisów się zmienia
    • wartości auto_increment (po prostu usuwam je, ale mam problemy z identyfikatorem)
    • znaczniki czasu (można również potencjalnie usunąć)
    • przejściowe * nagrania ... nie mam pojęcia, co z nimi zrobić

Proces, który utworzył migracje ze znacznikiem czasu, z dodanymi lub usuniętymi elementami, byłby idealny ... ale nie jestem pewien, czy to w ogóle możliwe?

Jacob Dorman
źródło
Czy chcesz zaktualizować wszystkie zmiany danych, czy tylko zmiany w strukturze ? i to jest twoje prawdziwe ZADANIE BIZNESOWE?
Lazy Badger
Podczas wprowadzania zmian w CMS-ach, takich jak wordpress, często występują zmiany treści i konfiguracji (dane DB) wraz ze zmianami logiki (kodu). Chciałbym mieć możliwość wersji obu. Dobrym początkiem byłyby zmiany struktury ... ZADANIE BIZNESOWE: klient prosi o nowy widget. Zainstaluj wtyczkę na serwerze pomostowym, zobowiązaj się do repo -> Skonfiguruj wtyczkę i dodaj przykładową zawartość -> po zatwierdzeniu, ściągnij zmiany kodu do produkcji, a następnie ręcznie wprowadź te same zmiany danych w administratorze produkcji.
Jacob Dorman
1
@JacobDorman Próbuję rozwiązać ten sam problem. Czy już coś wypracowałeś? Po kilku badaniach zaczynam myśleć, że jakaś niestandardowa wtyczka, która tworzy określony skrypt aktualizacji jest w porządku (prawdopodobnie eksportuje tylko zmiany konfiguracji, takie jak zainstalowane wtyczki i opcje konfiguracji - i niekoniecznie posty, kategorie i treść w ogóle) . Chciałbym usłyszeć, jeśli masz jakieś inne pomysły.
Víctor López García

Odpowiedzi:

4

Oto dwa możliwe rozwiązania, oba są w rzeczywistości rodzajowymi narzędziami kontroli wersji MySQL, ale można je dostosować do przepływu pracy:

dbv.php

To narzędzie tworzy „migracje”, które są w zasadzie skryptami SQL, na podstawie zmian wykrytych w bazie danych. Te skrypty są przechowywane w katalogu lokalnym, a zatem mogą zostać zatwierdzone do bieżącego VCS (na przykład git).

Jest używany przez interfejs WWW PHP.

DBVC

Zasadniczo podobny do poprzedniego narzędzia, jest oparty na interfejsie wiersza poleceń. Jest konfigurowany przez plik json. Główną różnicą jest to, że nie generuje automatycznie plików migracji.

Istnieje nierozwiązany problem z integracją tego z poprzednim podobnym, więc jest to coś, na co należy zwrócić uwagę.

Wtyczki Wordpress

Niektóre wtyczki, które mogą pomóc w tworzeniu powtarzalnego przepływu pracy:

Víctor López García
źródło
dbvc wygląda jak narzędzie, którego szukałem. dzięki!
Jacob Dorman,
1
Cieszę się, że to pomogło. Właśnie znalazłem inne interesujące narzędzie, które nie było od dłuższego czasu aktualizowane, ale może warto zdobyć łupy na: github.com/idler/MMP
Víctor López García
@JacobDorman Czy w DBVC możesz z powodzeniem łączyć zmiany DB z różnych środowisk? Zbudowałem strategię własną rękę , ale nie DBVC produkować pliki aktualizacji, czy też trzeba użyć czegoś jak mysqldiff między SQL wysypisk? Nie mogę sobie wyobrazić, aby to narzędzie było przydatne, chyba że pomaga wytworzyć różnice SQL, które są faktycznie porównywalne, szczególnie parametry instrukcji INSERT w osobnych wierszach ... chociaż przypuszczam, że można by edytować plik, aby sobie z tym poradzić ...
Spencer Williams,
@SpencerWilliams Nie skończyłem na używaniu DBVC (i nie użyłem mysqldiff), ale nadal dodałem zrzuty db do kontroli wersji ... W rzeczywistości nie widzę ich jako łączących, ale różnice w porównaniu do porównania mogą pomóc wyróżnić zmiany i problemy.
Jacob Dorman
@victor Sprawdziłem MMP. Dokonuje zmian schematu, ale nie różnicuje danych / wstawia.
David Silva Smith,
2

Robię to na MYSQL.

Umieszcza wszystkie schematy tabel i dane we własnym pliku, dzięki czemu mogę łatwo zobaczyć, co się zmieniło.

W przeciwieństwie do większości innych rozwiązań w tym wątku, rozwiązanie to pobiera dane, co jest ważne dla CMS.

To rozwiązanie nie używa żadnych narzędzi, tylko skrypt wiersza poleceń.

edycja: Odkryłem, że mój starszy kod zawierał błąd, w którym ważna była kolejność importu. zdjęcie --compactflagi naprawia błąd.

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     echo exporting $x
     mysqldump -u root -ppassword --skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset --extended-insert=FALSE --replace --skip-dump-date dbname $x > "./db/$x.sql"
done

Starszy kod

for x in `mysql --skip-column-names -u root -ppassword dbname -e 'show tables;'`; do
     mysqldump -u root -ppassword --compact --extended-insert=FALSE --replace dbname $x > "./db/$x.sql"
done

a oto jak zaimportować

for x in `ls ./db/*.sql`; do
     echo importing $x
     mysql -pdbpassword dbname --force < $x
done
David Silva Smith
źródło