Ich entwickle derzeit eine Anwendung mit einer MySQL-Datenbank.
Die Datenbankstruktur ist noch im Fluss und ändert sich während der Entwicklung (ich ändere meine lokale Kopie und lasse die auf dem Testserver allein).
Gibt es eine Möglichkeit, die beiden Instanzen der Datenbank zu vergleichen, um festzustellen, ob Änderungen vorgenommen wurden?
Während es derzeit in Ordnung ist, die vorherige Testserver-Datenbank einfach zu verwerfen, kann es etwas schwierig werden, beim Testen Testdaten einzugeben.
Das Gleiche, aber mehr wird später in der Produktion wieder passieren ...
Gibt es eine einfache Möglichkeit, schrittweise Änderungen an der Produktionsdatenbank vorzunehmen, vorzugsweise indem automatisch ein Skript erstellt wird, um diese zu ändern?
In den Antworten erwähnte Tools:
- MySQL Schema & Data Compare von Red-Gate (kommerziell)
- Maatkit (jetzt Percona)
- Liquibase
- Kröte
- Nob Hill Database Compare (kommerziell)
- MySQL Diff
- SQL EDT (kommerziell)
Antworten:
Wenn Sie mit kleinen Datenbanken arbeiten, bei denen ich festgestellt habe, dass mysqldump in beiden Datenbanken mit den Optionen
--skip-comments
und--skip-extended-insert
zum Generieren von SQL-Skripten ausgeführt wird, funktioniert die Ausführung von diff in den SQL-Skripten recht gut.Durch das Überspringen von Kommentaren vermeiden Sie bedeutungslose Unterschiede wie die Zeit, zu der Sie den Befehl mysqldump ausgeführt haben. Mit dem
--skip-extended-insert
Befehl stellen Sie sicher, dass jede Zeile mit einer eigenen Einfügeanweisung eingefügt wird. Dadurch wird die Situation beseitigt, in der ein einzelner neuer oder geänderter Datensatz in allen zukünftigen Einfügeanweisungen eine Kettenreaktion auslösen kann. Wenn Sie mit diesen Optionen arbeiten, werden größere Speicherauszüge ohne Kommentare erstellt. Dies ist wahrscheinlich nicht das, was Sie in der Produktion verwenden möchten, aber für die Entwicklung sollte es in Ordnung sein. Ich habe Beispiele für die Befehle angegeben, die ich unten verwende:quelle
mysqldump --opt --compact --skip-extended-insert -u user -p db table > file.sql
-d
,--no-data
kann für diejenigen von Interesse sein, die Produktionszwecke benötigen, sich aber nur um das Schema kümmernvimdiff
Toad for MySQL verfügt über Funktionen zum Vergleichen von Daten und Schemas, und ich glaube, es wird sogar ein Synchronisationsskript erstellt. Das Beste ist, es ist Freeware.
quelle
--run-all-tests --difftype sql --disable-binary-logging
options kann fast den gleichen Job ausführen (außer dass die Ausgabe mit Kommentaren gemischt wird und Sonderzeichen in Zeichenfolgen nicht maskiert werden).Ich benutze eine Software namens Navicat, um:
Es kostet Geld, es ist nur Windows und Mac und es hat eine verrückte Benutzeroberfläche, aber ich mag es.
quelle
In SQLyog (kommerziell) gibt es ein Schema-Synchronisierungstool, das SQL zum Synchronisieren von zwei Datenbanken generiert.
quelle
Aus der Funktionsvergleichsliste ... MySQL Workbench bietet in seiner Community Edition Schema Diff und Schema Synchronization an.
quelle
Es gibt sicherlich viele Möglichkeiten, aber in meinem Fall bevorzuge ich den Befehl dump und diff. Hier ist ein Skript, das auf Jareds Kommentar basiert:
Feedback ist willkommen :)
quelle
dbSolo, es wird bezahlt, aber diese Funktion könnte die 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
quelle
Wenn Sie nur Schemas (keine Daten) vergleichen müssen und Zugriff auf Perl haben, funktioniert mysqldiff möglicherweise. Ich habe es verwendet, weil Sie damit lokale Datenbanken mit entfernten Datenbanken (über SSH) vergleichen können, sodass Sie keine Daten ausgeben müssen.
http://adamspiers.org/computing/mysqldiff/
Es wird versucht, SQL-Abfragen zu generieren, um zwei Datenbanken zu synchronisieren, aber ich vertraue ihm (oder einem anderen Tool) nicht. Soweit ich weiß, gibt es keine 100% zuverlässige Möglichkeit, die Änderungen, die zum Konvertieren eines Datenbankschemas in ein anderes erforderlich sind, rückzuentwickeln, insbesondere wenn mehrere Änderungen vorgenommen wurden.
Wenn Sie beispielsweise nur den Spaltentyp ändern, kann ein automatisiertes Tool leicht erraten, wie dies neu erstellt werden kann. Wenn Sie die Spalte jedoch auch verschieben, umbenennen und andere Spalten hinzufügen oder entfernen, kann jedes Softwarepaket nur raten, was wahrscheinlich passiert ist. Und Sie verlieren möglicherweise Daten.
Ich würde vorschlagen, alle Schemaänderungen zu verfolgen, die Sie am Entwicklungsserver vornehmen, und diese Anweisungen dann manuell auf dem Live-Server auszuführen (oder sie in ein Upgrade-Skript oder eine Migration zu rollen). Es ist langwieriger, aber es schützt Ihre Daten. Und wenn Sie Endbenutzern Zugriff auf Ihre Website gewähren, werden Sie dann wirklich ständig umfangreiche Datenbankänderungen vornehmen?
quelle
--hostN
und ,--userN
oder es wird stillschweigend scheitern.Werfen Sie einen Blick auf http://www.liquibase.org/
quelle
check: http://schemasync.org/ Das schemasync-Tool funktioniert für mich. Es ist ein Befehlszeilen-Tool, das problemlos in der Linux-Befehlszeile funktioniert
quelle
Es gibt ein weiteres Open Source-Befehlszeilen-MySQL-Diff-Tool:
http://bitbucket.org/stepancheg/mysql-diff/
quelle
Es gibt ein nützliches Tool, das mit Perl geschrieben wurde und Maatkit heißt . Es verfügt unter anderem über mehrere Tools zum Vergleichen und Synchronisieren von Datenbanken.
quelle
SQL Compare von RedGate http://www.red-gate.com/products/SQL_Compare/index.htm
DBDeploy zur automatisierten Verwaltung von Datenbankänderungen http://dbdeploy.com/
quelle
Für mich selbst würde ich damit beginnen, beide Datenbanken zu sichern und die Speicherauszüge zu unterscheiden. Wenn Sie jedoch automatisch generierte Zusammenführungsskripte möchten, benötigen Sie ein echtes Tool.
Eine einfache Google-Suche ergab die folgenden Tools:
quelle
Schauen Sie sich dbForge Data Compare für MySQL an . Es handelt sich um eine Shareware mit einer 30-tägigen kostenlosen Testphase. Es ist ein schnelles MySQL-GUI-Tool für den Datenvergleich und die Synchronisierung, die Verwaltung von Datenunterschieden und die anpassbare Synchronisierung.
quelle
Nachdem ich stundenlang im Web nach einem einfachen Tool gesucht hatte, stellte ich fest, dass ich nicht im Ubuntu Software Center gesucht hatte. Hier ist eine kostenlose Lösung, die ich gefunden habe: http://torasql.com/ Sie behaupten, auch eine Version für Windows zu haben, aber ich benutze sie nur unter Ubuntu.
Bearbeiten: 2015-Feb-05 Wenn Sie ein Windows-Tool benötigen, ist TOAD perfekt und kostenlos: http://software.dell.com/products/toad-for-mysql/
quelle
Die Apache-Zeta-Komponentenbibliothek ist eine Allzweckbibliothek von lose gekoppelten Komponenten für die Entwicklung von Anwendungen, die auf PHP 5 basieren.
Mit eZ Components - DatabaseSchema können Sie:
Sie können das Tutorial hier überprüfen: http://incubator.apache.org/zetacomponents/documentation/trunk/DatabaseSchema/tutorial.html
quelle
Sehr einfach zu bedienendes Vergleichs- und Synchronisierungstool:
Database Comparer http://www.clevercomponents.com/products/dbcomparer/index.asp
Vorteile:
Nachteile:
quelle
Ich denke, Navicat für MySQL wird in diesem Fall hilfreich sein. Es unterstützt die Daten- und Struktursynchronisation für MySQL.
quelle
Für den ersten Teil der Frage mache ich einfach einen Dump von beiden und differenziere sie. Sie sind sich bei MySQL nicht sicher, aber postgres pg_dump verfügt über einen Befehl zum einfachen Speichern des Schemas ohne Tabelleninhalt, sodass Sie sehen können, ob Sie das Schema geändert haben.
quelle
Ich arbeite mit dem Marketing-Team von Nob Hill zusammen. Ich wollte Ihnen sagen, dass ich mich über Ihre Fragen, Vorschläge oder sonstige Fragen freuen werde. Bitte zögern Sie nicht, mich zu kontaktieren.
Wir haben uns ursprünglich entschlossen, unser Werkzeug von Grund auf neu zu entwickeln, da es zwar andere solche Produkte auf dem Markt gibt, aber keines von ihnen die Arbeit richtig macht. Es ist ziemlich einfach, Ihnen die Unterschiede zwischen Datenbanken zu zeigen. Es ist etwas ganz anderes, eine Datenbank wie die andere zu erstellen. Die reibungslose Migration von Schema und Daten war schon immer eine Herausforderung. Nun, wir haben es hier erreicht.
Wir sind so zuversichtlich, dass es Ihnen eine reibungslose Migration ermöglichen könnte, als wenn dies nicht der Fall wäre - wenn die generierten Migrationsskripte nicht lesbar genug sind oder für Sie nicht funktionieren und wir es nicht in fünf Werktagen beheben können - Sie erhalten Ihr eigenes kostenloses Exemplar!
http://www.nobhillsoft.com/NHDBCompare.aspx
quelle