2009-05-20 14 views
3

Ich habe ein paar Backups meiner Datenbank, und ich versuche herauszufinden, ob es eine Möglichkeit gibt, die Daten in den Backups zu vergleichen, um zu sehen, wie sich die Daten im Laufe der Zeit geändert haben. Ich habe keinen Zeitstempel auf den Feldern, die ich vergleichen möchte, aber ich habe eine eindeutige ID in der Zeile. Die Backups sind .sql-Dateien, die mit mysqldump erstellt wurden.Vergleichen von Daten aus MySQL Backups

Gibt es einen Prozess dafür?

Antwort

4

Es gibt eine Reihe von Diff-Tools für MySQL, einschließlich eines Tools namens MySQLDiff (http://www.mysqldiff.org/). Es gibt auch eine Kommandozeilen-Schnittstelle für diese, die hier gefunden werden können:

http://devzone.intellitree.com/projects/intellitree-cli-extension-to-mysqldiff/

Siehe diesen früheren Stackoverflow Beitrag für ein visuelles Diff-Tool ähnlich wie diesen (plus einige andere Lösungen):

https://stackoverflow.com/questions/218499/mysql-diff-tool

+0

sieht es so aus, dass ich für jedes dieser Tools die Backups in parallele dbs laden muss. Ich hatte gehofft, dass es eine Möglichkeit wäre, das direkt aus der .SQL-Datei zu machen. Aber ich habe mir nur angeschaut was ich in der .sql Datei drin habe, und ich kann verstehen warum es so nicht funktionieren würde. Ich habe nicht erkannt, dass mysqldump die Datenbank in eine Reihe von mysql-Anweisungen ablegt, um die Datenbank neu zu erstellen. – pedalpete

2

Sie könnten theoretisch Ihre Backups als zweite Datenbank importieren und dann ein PHP-Skript schreiben, das eine Verbindung zu Ihrem SQL-Server herstellt und die Einträge nach eindeutiger ID iteriert und so vergleicht, wie es geht.

Sie könnten auch einfach diff in der Befehlszeile verwenden, aber die resultierende Datenmenge möglicherweise nicht so praktikabel.

+0

Ich dachte ursprünglich daran, ein PHP-Skript zu erstellen, aber ich hoffte, dass ich dies tun könnte, ohne mehrere Instanzen der gleichen Datenbank zu erstellen (was es zu tun scheint).Ich hatte gehofft, dass sie nur die Daten in der .sql-Datei betrachten konnten. – pedalpete

+0

Wenn sich zwischen den Backups nur die Daten in der Menge geändert haben (nicht irgendeine der Tabellendefinitionen oder irgendetwas), dann wird das Kommandozeilen-Diff definitiv funktionieren. Es kann nur nicht zu schönen Ergebnissen führen. (Aber einige Bash Magie sollte das funktionieren :) – Tim

+0

Ich glaube, ich war vorher Missverständnisse. Ich betrachtete 'diff' als eine mysql-Funktion, aber jetzt sehe ich, dass Sie meinen, nur eine Datei vergleichen diff. Ich denke, das sollte funktionieren. – pedalpete

2

Sie könnten ein Tool wie WinMerge oder ein anderes Merge-Tool verwenden, um einen tatsächlichen Unterschied der Backups zu sehen. Der Erfolg hängt von der Größe Ihrer Dateien ab. Ich würde nicht empfehlen, dies für wirklich große Backups zu tun.

1

Wenn Sie Ihre Sicherungen mit mysqldump durchführen, sind Ihre Sicherungsdateien Standardtextdateien. Sie können dann jedes anständige Textdatei-Vergleichsprogramm verwenden (d. H. Diff auf einem Unix-System), um die Unterschiede zu sehen.

Eine nette Sache ist, dass das Tabellenschema zusammen mit den Daten ausgegeben wird.

Ein weiterer Vorteil ist, dass das Backup versions- und maschinenunabhängig ist - Sie können es auf jeder laufenden MySQL-Kopie wiederherstellen.

Der Nachteil ist, dass der Datenteil des Dumps als Zeilen maximaler Länge geschrieben wird, so dass einige Texteditoren daran ersticken.

Cheers,

-R

0

ein gutes Werkzeug für den Job gibt, die pydumpyhttps://code.google.com/p/pydumpy/ (Spiegel: https://github.com/miebach/pydumpy) ist

Es lässt Sie Dumps erstellen, die mit diff zu vergleichen sind leicht

Wenn Sie bereits vorhandene Dumps vergleichen möchten, können Sie zunächst eine temporäre mysql-Datenbank von jedem von ihnen erstellen und von dort aus starten.