Mysql
 sql >> Datenbank >  >> RDS >> Mysql

diff 2 große Datenbanktabellen

Sehen Sie sich das Open-Source-Percona-Toolkit an – insbesondere das pt-table-sync Dienstprogramm.

Sein Hauptzweck besteht darin, eine MySQL-Tabelle mit seiner Replik zu synchronisieren, aber da seine Ausgabe aus dem Satz von MySQL-Befehlen besteht, die zum Ausgleichen der Unterschiede zwischen zwei Tabellen erforderlich sind, eignet es sich hervorragend zum Vergleichen der beiden.

Was es tatsächlich unter der Haube tut, ist ein bisschen komplex, und es verwendet tatsächlich verschiedene Ansätze, je nachdem, was es über Ihre Tabellen (Indizes usw.) sagen kann, aber eine der Grundideen ist, dass es schnelle CRC32-Prüfsummen macht auf Chunks der Indizes , und wenn die Prüfsummen nicht übereinstimmen, werden diese Datensätze genauer untersucht. Beachten Sie, dass diese Methode viel ist schneller, als beide Indizes linear zu durchlaufen und zu vergleichen.

Es bringt Sie jedoch nur einen Teil des Weges. Da die generierten Befehle eine Replik mit ihrem Master synchronisieren sollen, ersetzen sie einfach den aktuellen Inhalt der Replik für alle unterschiedlichen Datensätze. Mit anderen Worten, die generierten Befehle ändern all Felder im Datensatz (nicht nur die, die sich geändert haben). Also, sobald Sie pt-table-sync verwenden Um die Unterschiede zu finden, müssten Sie die Ergebnisse in etwas einschließen, um die unterschiedlichen Datensätze zu untersuchen, indem Sie jedes Feld im Datensatz vergleichen.

Aber pt-table-sync macht das, was Sie bereits als den schwierigen Teil kennen:Unterschiede erkennen, wirklich schnell. Es ist in Perl geschrieben; die Quelle sollte gute Breadcrumbs liefern.