Porównaj dwie bazy danych MySQL [zamknięte]

Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięte 8 lat temu . zamknięte. To pytanie i jego odpowiedzi są zamknięte , ponieważ pytanie jest off-topic, ale ma znaczenie historyczne. Obecnie nie przyjmuje nowych odpowiedzi ani interakcji.

Obecnie pracuję nad aplikacją wykorzystującą bazę danych MySQL.

Struktura bazy danych jest ciągle w ruchu i zmienia się w trakcie rozwoju (zmieniam swoją lokalną kopię, pozostawiając tylko tę na serwerze testowym).

Czy istnieje sposób, aby porównać dwie instancje bazy danych, aby zobaczyć, czy nie było żadnych zmian?

Podczas gdy obecnie po prostu odrzuca poprzedni serwer testowy bazy danych jest w porządku, ponieważ testowanie zaczyna wprowadzać dane testowe, może być trochę trudne.
To samo, choć bardziej będzie się działo później w produkcji...

Czy istnieje łatwy sposób na stopniowe wprowadzanie zmian w bazie produkcyjnej, najlepiej przez automatyczne tworzenie skryptu do jej modyfikacji?


Narzędzia wymienione w odpowiedziach:

Author: Rob, 2008-10-22

21 answers

Jeśli pracujesz z małymi bazami danych, znalazłem uruchomiony mysqldump na obu bazach z opcjami --skip-comments i --skip-extended-insert do generowania skryptów SQL, następnie uruchomienie diff na skryptach SQL działa całkiem dobrze.

Pomijając komentarze unikasz bezsensownych różnic, takich jak czas uruchomienia polecenia mysqldump. Używając polecenia --skip-extended-insert 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 spowodować łańcuch reakcja we wszystkich przyszłych oświadczeniach insert. Uruchamianie z tymi opcjami powoduje większe zrzuty bez komentarzy, więc prawdopodobnie nie jest to coś, co chcesz zrobić w użyciu produkcyjnym, ale dla rozwoju powinno być dobrze. Poniżej umieściłem przykłady poleceń, których używam:

mysqldump --skip-comments --skip-extended-insert -u root -p dbName1>file1.sql
mysqldump --skip-comments --skip-extended-insert -u root -p dbName2>file2.sql
diff file1.sql file2.sql
 210
Author: Jared,
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
2014-10-07 15:40:43

Toad for MySQL ma funkcje porównywania danych i schematów i wierzę, że stworzy nawet skrypt synchronizacji. Najlepsze jest to, że jest to freeware.

 99
Author: Anson Smith,
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
2014-07-07 00:36:12

Używam oprogramowania o nazwie Navicat do:

  • Synchronizuj żywe bazy danych z moimi testowymi bazami danych.
  • Pokaż różnice między dwoma bazami danych.

To kosztuje, jest tylko windows i mac, i ma zwariowany interfejs, ale podoba mi się.

 20
Author: seanyboy,
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
2008-10-22 13:52:46

Istnieje narzędzie do synchronizacji schematu w SQLyog (komercyjny), które generuje SQL do synchronizacji dwóch baz danych.

Tutaj wpisz opis obrazka

 17
Author: Yury Litvinov,
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
2011-04-01 16:32:54

Z listy porównań funkcji... MySQL Workbench oferuje różnicowanie schematów i synchronizację schematów w ich edycji społecznościowej.

 13
Author: andyhky,
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
2008-10-22 13:50:30

Jest wiele sposobów na pewno, ale w moim przypadku wolę polecenie dump i diff. Oto scenariusz oparty na komentarzu Jareda:

#!/bin/sh

echo "Usage: dbdiff [user1:pass1@dbname1] [user2:pass2@dbname2] [ignore_table1:ignore_table2...]"

dump () {
  up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
  mysqldump --opt --compact --skip-extended-insert -u $user -p$pass $dbname $table > $2
}

rm -f /tmp/db.diff

# Compare
up=${1%%@*}; user=${up%%:*}; pass=${up##*:}; dbname=${1##*@};
for table in `mysql -u $user -p$pass $dbname -N -e "show tables" --batch`; do
  if [ "`echo $3 | grep $table`" = "" ]; then
    echo "Comparing '$table'..."
    dump $1 /tmp/file1.sql
    dump $2 /tmp/file2.sql
    diff -up /tmp/file1.sql /tmp/file2.sql >> /tmp/db.diff
  else
    echo "Ignored '$table'..."
  fi
done
less /tmp/db.diff
rm -f /tmp/file1.sql /tmp/file2.sql

Opinie mile widziane:)

 13
Author: develCuy,
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
2012-04-23 18:02:11

DbSolo, jest płatna, 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 alt text

 12
Author: jmpeace,
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
2010-10-21 22:30:48

Jeśli potrzebujesz tylko porównywać Schematy (nie Dane) i mieć dostęp do Perla, mysqldiff może działać. Użyłem go, ponieważ pozwala porównywać lokalne bazy danych do zdalnych baz danych (przez SSH), więc nie musisz się martwić o dumping żadnych danych.

Http://adamspiers.org/computing/mysqldiff/

Będzie próbował wygenerować zapytania SQL, aby zsynchronizować dwie bazy danych, ale nie ufam mu(ani żadnemu narzędziu). Z tego co wiem, nie ma 100% niezawodnego sposobu na inżynierię wsteczną zmiany potrzebne do konwersji jednego schematu bazy danych na inny, zwłaszcza gdy dokonano wielu zmian.

Na przykład, jeśli zmienisz tylko typ kolumny, zautomatyzowane narzędzie może łatwo odgadnąć, jak to odtworzyć. Ale jeśli przeniesiesz kolumnę, zmienisz jej nazwę i dodasz lub usuniesz inne kolumny, najlepszym rozwiązaniem, jakie może zrobić każdy pakiet oprogramowania, jest odgadnięcie, co prawdopodobnie się stało. I może skończyć się utratą danych.

Sugerowałbym śledzenie wszelkich zmian schematu, które wprowadzasz do rozwoju server, a następnie uruchamianie tych poleceń ręcznie na serwerze aktywnym (lub włączanie ich do skryptu aktualizacji lub migracji). Jest to bardziej żmudne, ale zapewni bezpieczeństwo Twoich danych. A zanim zaczniesz zezwalać użytkownikom końcowym na dostęp do twojej witryny, czy naprawdę będziesz wprowadzać ciągłe ciężkie zmiany w bazie danych?

 11
Author: Zac,
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-02-18 15:02:35
 7
Author: anders.norgaard,
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
2008-10-22 13:46:46

Sprawdź: http://schemasync.org/ narzędzie schemasync działa dla mnie, jest to narzędzie wiersza poleceń działa łatwo w Linuksie wiersz poleceń

 6
Author: likeuclinux,
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
2011-04-12 18:08:37

Istnieje jeszcze jedno narzędzie mysql-diff z linii poleceń open source:

Http://bitbucket.org/stepancheg/mysql-diff/

 4
Author: stepancheg,
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
2009-02-07 21:22:49

Istnieje przydatne narzędzie napisane w Perlu o nazwie Maatkit . Posiada między innymi kilka narzędzi do porównywania i synchronizacji baz danych.

 3
Author: Jarod Elliott,
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
2008-10-22 13:44:39

SQL Compare by RedGate http://www.red-gate.com/products/SQL_Compare/index.htm

DBDeploy pomaga w automatycznym zarządzaniu zmianami w bazie danych http://dbdeploy.com/

 3
Author: George,
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
2008-10-22 13:53:29

Dla siebie, Chciałbym zacząć z dumping obu baz danych i diffing zrzutów, ale jeśli chcesz automatycznie generowane Skrypty scalania, będziesz chciał uzyskać prawdziwe narzędzie.

Prosta wyszukiwarka Google znalazła następujące narzędzia:

 3
Author: Craig Trader,
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
2008-10-22 13:54:14

Spójrz na porównanie danych dbForge dla MySQL. Jest to shareware z 30-dniowym bezpłatnym okresem próbnym. Jest to szybkie narzędzie MySQL GUI do porównywania i synchronizacji danych, zarządzania różnicami danych i konfigurowalnej synchronizacji.

porównanie danych dbForge dla MySQL

 3
Author: Devart,
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
2010-09-24 11:21:45

Po godzinach szukania w Internecie prostego narzędzia, zdałem sobie sprawę, że nie szukałem w Centrum Oprogramowania Ubuntu. Oto darmowe rozwiązanie, które znalazłem: http://torasql.com/ Twierdzą, że mają również wersję Dla Windows, ale używam jej tylko pod Ubuntu.

Edit:2015-Feb-05 Jeśli potrzebujesz Narzędzia Windows, TOAD jest idealny i darmowy: http://software.dell.com/products/toad-for-mysql/

 3
Author: Nikolay Ivanov,
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-02-05 12:29:20

Apache Zeta components library jest biblioteką ogólnego przeznaczenia luźno powiązanych komponentów do tworzenia aplikacji opartych na PHP 5.

EZ Components-database pozwala na:

   .Create/Save a database schema definition;
   .Compare database schemas;
   .Generate synchronization queries;

Możesz sprawdzić tutorial tutaj: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html

 2
Author: Naim Zard,
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
2010-11-24 09:01:31

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:

  • fast
  • Łatwy w użyciu
  • Łatwy wybór zmian do zastosowania

Wady:

  • nie synchronizuje długości z małymi intami
  • nie synchronizuje nazw indeksów prawidłowo
  • nie synchronizuje komentarzy
 2
Author: Artem Goutsoul,
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-02-28 11:42:16

Myślę, że Navicat dla MySQL będzie pomocny w tym przypadku. Obsługuje synchronizację danych i struktur dla MySQL. Tutaj wpisz opis obrazka

 1
Author: ,
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
2011-01-25 08:05:27

Dla pierwszej części pytania, po prostu zrobić zrzut obu i diff je. Nie jestem pewien co do mysql, ale Postgres pg_dump ma polecenie, aby po prostu zrzucić schemat bez zawartości tabeli, więc możesz zobaczyć, czy nie zmieniłeś schematu.

 0
Author: Paul Tomblin,
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
2008-10-22 13:43:12

Pracuję z zespołem marketingowym Nob Hill, chciałem ci powiedzieć, że chętnie wysłucham twoich pytań, sugestii lub czegokolwiek innego, skontaktuj się ze mną.

Początkowo postanowiliśmy stworzyć nasze narzędzie od podstaw, ponieważ chociaż na rynku są inne tego typu produkty, żaden z nich nie wykonuje swojej pracy dobrze. Dość łatwo jest pokazać różnice między bazami danych. To zupełnie co innego, aby jedna baza danych była taka sama jak druga. Płynna migracja zarówno schematu, jak i danych, zawsze było wyzwaniem. Osiągnęliśmy to tutaj.
Jesteśmy tak pewni, że może zapewnić Ci płynną migrację, niż Jeśli nie – jeśli generowane Skrypty migracji nie są wystarczająco czytelne lub nie będą dla ciebie działać, a my nie możemy tego naprawić w ciągu pięciu dni roboczych-otrzymasz własną bezpłatną kopię!

Http://www.nobhillsoft.com/NHDBCompare.aspx

 0
Author: ,
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
2009-01-22 19:09:57