Obecnie tworzę aplikację przy użyciu bazy danych MySQL.
Struktura bazy danych wciąż się zmienia i zmienia się w trakcie rozwoju (zmieniam moją kopię lokalną, pozostawiając tę samą na serwerze testowym).
Czy istnieje sposób na porównanie dwóch instancji bazy danych, aby sprawdzić, czy były jakieś zmiany?
Podczas gdy obecnie po prostu usunięcie poprzedniej bazy danych serwera testowego jest w porządku, ponieważ testowanie rozpoczyna się od wprowadzania danych testowych, może to być nieco trudne.
To samo, choć więcej, wydarzy się ponownie później w produkcji ...
Czy istnieje prosty sposób na stopniowe wprowadzanie zmian w produkcyjnej bazie danych, najlepiej poprzez automatyczne tworzenie skryptu do jej modyfikacji?
Narzędzia wymienione w odpowiedziach:
- Schemat MySQL i porównywanie danych Red-Gate (komercyjne)
- Maatkit (obecnie Percona)
- likibaza
- Ropucha
- Baza danych Nob Hill Porównaj (wersja komercyjna)
- MySQL Diff
- SQL EDT (komercyjny)
Odpowiedzi:
Jeśli pracujesz z małymi bazami danych, zauważyłem, że uruchomiłem mysqldump na obu bazach danych z opcjami
--skip-comments
i,--skip-extended-insert
aby wygenerować skrypty SQL, a następnie uruchomienie diff na skryptach SQL działa całkiem dobrze.Pomijając komentarze, unikniesz bezsensownych różnic, takich jak czas uruchomienia polecenia mysqldump. Za pomocą
--skip-extended-insert
polecenia upewniasz się, że każdy wiersz jest wstawiany z własną instrukcją insert. Eliminuje to sytuację, w której pojedynczy nowy lub zmodyfikowany rekord może powodować reakcję łańcuchową we wszystkich przyszłych instrukcjach wstawiania. Uruchamianie z tymi opcjami powoduje większe zrzuty bez komentarzy, więc prawdopodobnie nie jest to coś, co chcesz zrobić w zastosowaniach produkcyjnych, ale w przypadku rozwoju powinno być dobrze. Poniżej zamieszczam przykłady poleceń, których używam:źródło
mysqldump --opt --compact --skip-extended-insert -u user -p db table > file.sql
-d
,--no-data
mogą być interesujące dla tych, którzy potrzebują użycia produkcyjnego, ale dbają tylko o schematvimdiff
Toad dla MySQL ma funkcje porównywania danych i schematów i wierzę, że nawet stworzy skrypt synchronizacji. Najlepsze jest to, że jest darmowy.
źródło
--run-all-tests --difftype sql --disable-binary-logging
opcjami może wykonać prawie to samo zadanie (z wyjątkiem tego, że dane wyjściowe są pomieszane z komentarzem, a znaki specjalne w ciągu nie są poprzedzane znakami ucieczki).Korzystam z oprogramowania o nazwie Navicat, aby:
Kosztuje pieniądze, to tylko Windows i Mac, i ma niesamowity interfejs użytkownika, ale lubię to.
źródło
W SQLyog (komercyjnym) jest narzędzie do synchronizacji schematów, które generuje SQL do synchronizacji dwóch baz danych.
źródło
Z listy porównawczej funkcji ... MySQL Workbench oferuje Schema Diff i Schema Synchronization w swoim wydaniu społecznościowym.
źródło
Z pewnością istnieje wiele sposobów, ale w moim przypadku wolę polecenie dump i diff. Oto skrypt oparty na komentarzu Jareda:
Informacje zwrotne są mile widziane :)
źródło
dbSolo, jest płatny, ale ta funkcja może być tą, której szukasz http://www.dbsolo.com/help/compare.html
Współpracuje z Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 i MySQL
źródło
Jeśli potrzebujesz tylko porównać schematy (nie dane) i mieć dostęp do Perla, mysqldiff może działać. Użyłem go, ponieważ pozwala porównać lokalne bazy danych ze zdalnymi bazami danych (przez SSH), więc nie musisz zawracać sobie głowy zrzucaniem jakichkolwiek danych.
http://adamspiers.org/computing/mysqldiff/
Spróbuje wygenerować zapytania SQL w celu zsynchronizowania dwóch baz danych, ale nie ufam temu (ani żadnemu narzędziu, właściwie). O ile mi wiadomo, nie ma w 100% niezawodnego sposobu na przeprowadzenie inżynierii wstecznej zmian potrzebnych do przekonwertowania jednego schematu bazy danych na inny, szczególnie gdy wprowadzono wiele zmian.
Na przykład, jeśli zmienisz tylko typ kolumny, zautomatyzowane narzędzie może łatwo odgadnąć, jak je odtworzyć. Ale jeśli również przeniesiesz kolumnę, zmienisz jej nazwę i dodasz lub usuniesz inne kolumny, najlepsze, co może zrobić każdy pakiet oprogramowania, to zgadnij, co prawdopodobnie się wydarzyło. I możesz stracić dane.
Sugeruję śledzenie wszelkich zmian schematu, które wprowadzasz na serwerze programistycznym, a następnie ręczne uruchamianie tych instrukcji na serwerze na żywo (lub włączenie ich do skryptu aktualizacji lub migracji). Jest to bardziej nużące, ale zapewni bezpieczeństwo danych. A zanim zaczniesz zezwalać użytkownikom końcowym na dostęp do Twojej witryny, czy naprawdę będziesz dokonywał ciągłych, ciężkich zmian w bazie danych?
źródło
--hostN
i--userN
czy będzie to nie cicho.Zajrzyj na http://www.liquibase.org/
źródło
sprawdź: http://schemasync.org/ narzędzie schemasync działa dla mnie, to narzędzie wiersza poleceń działa łatwo w wierszu poleceń systemu Linux
źródło
Istnieje inne narzędzie wiersza polecenia mysql-diff typu open source:
http://bitbucket.org/stepancheg/mysql-diff/
źródło
Istnieje przydatne narzędzie napisane przy użyciu perla o nazwie Maatkit . Ma wiele narzędzi do porównywania i synchronizacji baz danych.
źródło
Porównaj SQL przez RedGate http://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy pomaga w automatycznym zarządzaniu zmianą bazy danych http://dbdeploy.com/
źródło
Dla mnie zacznę od zrzucania obu baz danych i różnicowania zrzutów, ale jeśli chcesz automatycznie generować skrypty scalające, będziesz chciał zdobyć prawdziwe narzędzie.
Prosta wyszukiwarka Google wykazała następujące narzędzia:
źródło
Spójrz na dbForge Data Compare dla MySQL . To shareware z 30-dniowym bezpłatnym okresem próbnym. Jest to szybkie narzędzie GUI MySQL do porównywania i synchronizacji danych, zarządzania różnicami danych i dostosowywania synchronizacji.
źródło
Po wielu godzinach szukania w Internecie prostego narzędzia zdałem sobie sprawę, że nie zajrzałem do Centrum oprogramowania Ubuntu. Oto bezpłatne rozwiązanie, które znalazłem: http://torasql.com/ Podobno mają też wersję dla Windows, ale używam jej tylko pod Ubuntu.
Edycja: 2015-lut-05 Jeśli potrzebujesz narzędzia Windows, TOAD jest idealny i darmowy: http://software.dell.com/products/toad-for-mysql/
źródło
Biblioteka komponentów Apache Zeta to biblioteka ogólnego przeznaczenia luźno sprzężonych komponentów do tworzenia aplikacji opartych na PHP 5.
eZ Components - DatabaseSchema pozwala na:
Samouczek możesz sprawdzić tutaj: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html
źródło
Bardzo łatwe w użyciu narzędzie do porównywania i synchronizacji:
porównywarka baz danych http://www.clevercomponents.com/products/dbcomparer/index.asp
Zalety:
Niedogodności:
źródło
Myślę, że Navicat dla MySQL będzie pomocny w tym przypadku. Obsługuje synchronizację danych i struktury dla MySQL.
źródło
W pierwszej części pytania po prostu zrzucam oba i różnicuję je. Nie jestem pewien co do mysql, ale postgres pg_dump ma polecenie, aby po prostu zrzucić schemat bez zawartości tabeli, dzięki czemu można sprawdzić, czy schemat został zmieniony.
źródło
Współpracuję z zespołem marketingowym Nob Hill, chciałem powiedzieć, że z przyjemnością usłyszę twoje pytania, sugestie lub cokolwiek innego, prosimy o kontakt.
Początkowo zdecydowaliśmy się stworzyć nasze narzędzie od zera, ponieważ chociaż istnieją inne takie produkty na rynku, żadne z nich nie spełnia swojej roli. Bardzo łatwo jest pokazać różnice między bazami danych. To zupełnie inna rzecz, aby stworzyć jedną bazę danych taką jak druga. Płynna migracja zarówno schematu, jak i danych zawsze była wyzwaniem. Osiągnęliśmy to tutaj.
Jesteśmy tak pewni, że może zapewnić płynną migrację, niż gdyby nie - jeśli generowane przez nią skrypty migracji nie będą wystarczająco czytelne lub nie będą działać, a my nie możemy tego naprawić w ciągu pięciu dni roboczych - dostaniesz swój własny bezpłatny egzemplarz!
http://www.nobhillsoft.com/NHDBCompare.aspx
źródło