Frage

Ich entwickle derzeit eine Anwendung mit einer MySQL-Datenbank.

Die Datenbank-Struktur ist noch im Fluss und Veränderungen während der Entwicklung fortschreitet (ich meine lokale Kopie ändern, so dass die eine auf den Testserver allein).

Gibt es eine Möglichkeit, die zwei Instanzen der Datenbank zu vergleichen, um zu sehen, ob es irgendwelche Änderungen waren?

Während zur Zeit einfach die vorherige Test-Server-Datenbank zu verwerfen ist in Ordnung, wie Tests beginnen Testdaten eingeben, es könnte ein bisschen schwierig bekommen.
Das gleiche mehr aber so wird in der Produktion es später noch einmal passieren ...

Gibt es eine einfache Möglichkeit, schrittweise Änderungen in der Produktionsdatenbank zu machen, vorzugsweise automatisch ein Skript erstellen, ihn zu ändern?


Werkzeuge in den Antworten erwähnt:

War es hilfreich?

Lösung

Wenn Sie mit kleinen Datenbanken arbeiten ich gefunden habe, laufe mysqldump auf beiden Datenbanken mit den --skip-comments und --skip-extended-insert Optionen SQL-Skripte zu generieren, dann diff laufen auf den SQL-Skripten funktioniert ziemlich gut.

Durch Weglassen Kommentare Sie bedeutungslos Unterschiede wie die Zeit vermeiden Sie den mysqldump Befehl ausgeführt. Durch die Verwendung Sie den Befehl --skip-extended-insert gewährleisten jede Zeile mit einem eigenen Insert-Anweisung eingefügt wird. Dadurch entfällt die Situation, in der eine einzelne neue oder geänderte Datensatz eine Kettenreaktion in allen zukünftigen Insert-Anweisungen führen kann. Laufen mit diesen Optionen erzeugt größere Deponien ohne Kommentare, so ist es wahrscheinlich etwas, das Sie nicht in der produktiven Einsatz tun wollen, aber für die Entwicklung sollte es in Ordnung sein. Ich habe Beispiele für die Befehle setzen verwende ich unter:

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

Andere Tipps

Toad for MySQL hat Daten und Schema Funktionen vergleichen zu können, und ich glaube, es wird sogar ein Synchronisationsskript erstellen. Das Beste von allem, es ist Freeware.

Ich benutze ein Stück Software namens Navicat :

  • Sync Live-Datenbanken auf meine Test-Datenbanken.
  • Zeige Unterschiede zwischen den beiden Datenbanken.

Es kostet Geld, es ist Windows und Mac nur, und es ist eine whacky UI bekommt, aber ich mag es.

Es gibt ein Schema Synchronisierungstool in SQLyog (Gewerbe), die für die Synchronisierung von zwei Datenbanken SQL erzeugt.

eingeben Bild Beschreibung hier

Aus dem Feature Vergleichsliste ... MySQL Workbench bietet Schema Diff und Schema-Synchronisation in ihrer Community Edition.

Es gibt viele Möglichkeiten, sicher, aber in meinem Fall ziehe ich den Dump und diff-Befehl. Hier ist also ein Skript basiert auf Jareds Kommentar:

#!/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

Feedback ist willkommen:)

dbSolo wird bezahlt, aber diese Funktion möglicherweise die, die Sie suchen http://www.dbsolo.com/help/compare.html

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

Wenn Sie nur Schemata vergleichen müssen (keine Daten) und haben Zugriff auf Perl, könnte mysqldiff arbeiten. Ich habe es verwendet, weil es können Sie lokale Datenbanken auf Remote-Datenbanken (via SSH) zu vergleichen, so dass Sie keine Daten stören müssen Dumping.

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

Es wird versuchen, SQL-Abfragen zu generieren zwei Datenbanken zu synchronisieren, aber ich traue es nicht (oder ein beliebiges Werkzeug, tatsächlich). Soweit ich weiß, gibt es keine 100% zuverlässige Art und Weise um die Änderungen Reverse-Engineering benötigt ein Datenbank-Schema in ein anderes zu konvertieren, vor allem, wenn mehrere Änderungen vorgenommen wurden.

Zum Beispiel, wenn Sie nur die Typen einer Spalte zu ändern, kann ein automatisiertes Werkzeug leicht erraten, wie das neu zu erstellen. Aber wenn Sie auch die Spalte verschieben, umbenennen und hinzufügen oder andere Spalten entfernen, das beste jedes Software-Paket kann tun ist, erraten, was wohl passiert ist. Und Sie können bis zu verlieren Daten beenden.

Ich würde vorschlagen, Kurs zu halten nach einem Schema-Änderungen an den Entwicklungsserver zu machen, dann diese Aussagen mit der Hand auf dem Live-Server ausgeführt wird (oder sie in einen Upgrade-Skript oder Migration rollierend). Es ist eher langweilig, aber es wird Ihre Daten sicher zu halten. Und von der Zeit beginnen Sie Endanwendern auf Ihre Website zugreifen, sind Sie wirklich konstante schwere Datenbank-Änderungen zu machen?

Hier finden Sie aktuelle http://www.liquibase.org/

Kontrolle: http://schemasync.org/ das schemasync Tool funktioniert für mich ist es ein Kommandozeilen-Tool leicht in Linux-Befehlszeile

funktioniert

Es ist ein weiteres Open-Source-Befehlszeilen mysql-Diff-Tool:

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

Es ist ein nützliches Werkzeug, mit Perl geschrieben namens Maatkit . Es verfügt über mehrere Datenbank-Vergleich und die Synchronisation Tools unter anderem.

SQL Vergleichen von RedGate http://www.red-gate.com/products/SQL_Compare/index. htm

DBDeploy mit Datenbank-Change-Management in einer automatisierten Weise helfen http://dbdeploy.com/

Für mich, ich möchte beginnen mit beiden Datenbanken Dumping und die Differenzen zwischen den Deponien, aber wenn Sie automatisch Skripte fusionieren erzeugt werden sollen, Sie gehen ein echtes Werkzeug bekommen wollen.

Ein einfaches Google-Suche die folgenden Werkzeuge aufgedreht:

Hier finden Sie aktuelle dbForge Daten vergleichen für MySQL . Es ist ein Shareware mit 30-Tage kostenlose Probezeit. Es ist ein schnelles MySQL GUI-Tool für den Datenvergleich und Synchronisation, Verwaltung von Daten Unterschieden und anpassbare Synchronisation.

dbForge Daten vergleichen für MySQL

Nach Stunden auf Web für einfaches Werkzeug gesucht, erkennen ich, ich nicht in Ubuntu Software Center aussehen. Hier ist eine kostenlose Lösung, die ich gefunden: http://torasql.com/ Sie behaupten auch eine Version für Windows haben, aber ich verwende es nur unter Ubuntu.

Edit: 2015-Feb-05 Wenn Sie Windows-Tool benötigen, TOAD ist perfekt und frei: http://software.dell.com/products/toad-for-mysql/

Die Apache-zeta-Komponenten-Bibliothek ist eine Allzweck-Bibliothek von loosly gekoppelt Komponenten für die Entwicklung von Anwendungen auf Basis von PHP 5.

eZ Components - Database können Sie:

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

Sie können das Tutorial hier überprüfen: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema /tutorial.html

Sehr einfach zu bedienen Vergleichs- und Synchronisierungstool:
   Datenbankvergleichers     http://www.clevercomponents.com/products/dbcomparer/index.asp

Vorteile:

  • fast
  • einfach zu bedienen
  • einfache Änderungen auszuwählen anwenden

Nachteile:

  • synchronisieren nicht Länge winzige Ints
  • synchronisieren nicht Indexnamen richtig
  • nicht synchronisieren Kommentare

Ich denke, Navicat for MySQL für diesen Fall hilfreich sein . Es unterstützt Daten und Aufbau Synchronisation für MySQL. eingeben Bild Beschreibung hier

Für den ersten Teil der Frage, ich habe nur ein Abbild der beiden und sie diff. Nicht sicher mysql, aber Postgres Pg_dump einen Befehl muss nur Dump das Schema ohne die Tabelleninhalte, so können Sie sehen, wenn Sie das Schema jeder geändert haben.

Ich arbeite mit Nob Hill Marketing-Team, wollte ich Ihnen sagen, ich werde glücklich sein, um Ihre Fragen zu hören, Anregungen oder irgendetwas anderes, wenden Sie sich an mich wenden.

Wir entschieden uns ursprünglich unser Tool von Grund auf neu zu erstellen, da während es andere solche Produkte auf dem Markt sind, keiner von ihnen den Job richtig tun. Es ist ganz einfach, die Unterschiede zwischen den Datenbanken zu zeigen. Es ist eine ganz andere, eigentlich eine Datenbank wie die anderen zu machen. Sanfte Migration sowohl von Schema und Daten, ist immer eine Herausforderung. Nun, wir haben es hier erreicht.
 Wir sind so überzeugt, dass es Ihnen eine reibungslose Migration zur Verfügung stellen könnte, als wenn dies nicht der Fall - wenn die Migrationsskripte erzeugt sie sind nicht lesbar genug oder nicht für Sie arbeiten, und wir können es nicht fix in fünf Werktagen - Sie werden Ihr eigenes kostenloses Exemplar bekommen!

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top