368 Stimmen

Zwei MySQL-Datenbanken vergleichen

Ich entwickle derzeit eine Anwendung, die eine MySQL-Datenbank verwendet.

Die Datenbankstruktur ist noch im Fluss und ändert sich im Laufe der Entwicklung (ich ändere meine lokale Kopie und lasse diejenige auf dem Testserver in Ruhe).

Gibt es eine Möglichkeit, die beiden Instanzen der Datenbank zu vergleichen, um festzustellen, ob es Änderungen gegeben hat?

Während es derzeit noch ausreicht, die vorherige Testserver-Datenbank einfach zu löschen, könnte es bei der Eingabe von Testdaten ein wenig schwierig werden.
Das Gleiche, wenn auch in größerem Umfang, wird später in der Produktion wieder passieren...

Gibt es eine einfache Möglichkeit, schrittweise Änderungen an der Produktionsdatenbank vorzunehmen, vorzugsweise durch die automatische Erstellung eines Skripts zur Änderung der Datenbank?


In den Antworten erwähnte Tools:

13voto

andyhky Punkte 1728

Aus der Liste des Funktionsvergleichs... MySQL-Workbench bietet Schema Diff und Schema-Synchronisierung in ihrer Community-Edition.

12voto

jmpeace Punkte 181

DbSolo, es ist kostenpflichtig, aber diese Funktion könnte diejenige sein, nach der Sie suchen http://www.dbsolo.com/help/compare.html

Es funktioniert mit Oracle, Microsoft SQL Server, Sybase, DB2, Solid, PostgreSQL, H2 und MySQL alt text

11voto

Zac Punkte 956

Wenn Sie nur Schemata (nicht Daten) vergleichen müssen und Zugang zu Perl haben, könnte mysqldiff funktionieren. Ich habe es benutzt, weil man damit lokale Datenbanken mit entfernten Datenbanken (über SSH) vergleichen kann, so dass man sich nicht die Mühe machen muss, irgendwelche Daten zu dumpen.

http://adamspiers.org/computing/mysqldiff/

Es versucht, SQL-Abfragen zu generieren, um zwei Datenbanken zu synchronisieren, aber ich traue ihm (oder eigentlich jedem Tool) nicht. Soweit ich weiß, gibt es keine 100 % verlässliche Methode, um die Änderungen, die für die Konvertierung eines Datenbankschemas in ein anderes erforderlich sind, rückgängig zu machen, insbesondere wenn mehrere Änderungen vorgenommen wurden.

Wenn Sie z. B. nur den Typ einer Spalte ändern, kann ein automatisiertes Tool leicht erraten, wie es diese Spalte wiederherstellen kann. Wenn Sie aber die Spalte auch verschieben, umbenennen und andere Spalten hinzufügen oder entfernen, kann jedes Softwarepaket bestenfalls raten, was wahrscheinlich passiert ist. Und das kann zu Datenverlusten führen.

Ich würde vorschlagen, alle Schemaänderungen, die Sie am Entwicklungsserver vornehmen, zu protokollieren und diese Anweisungen dann von Hand auf dem Live-Server auszuführen (oder sie in ein Upgrade-Skript oder eine Migration einzubauen). Das ist zwar mühsamer, aber Ihre Daten sind so sicher. Und wenn Sie Endbenutzern den Zugriff auf Ihre Website ermöglichen, wollen Sie dann wirklich ständig umfangreiche Datenbankänderungen vornehmen?

7voto

anders.norgaard Punkte 1052

Werfen Sie einen Blick auf http://www.liquibase.org/

6voto

likeuclinux Punkte 69

Prüfen: http://schemasync.org/ das Schemasync-Tool funktioniert bei mir, es ist ein Kommandozeilen-Tool und funktioniert problemlos in der Linux-Kommandozeile

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X