Mysql
 sql >> Base de données >  >> RDS >> Mysql

diff 2 grandes tables de base de données

Découvrez le Percona Toolkit open source --- plus précisément, le pt-table-sync utilitaire.

Son objectif principal est de synchroniser une table MySQL avec sa réplique, mais comme sa sortie est l'ensemble de commandes MySQL nécessaires pour concilier les différences entre deux tables, c'est un choix naturel pour comparer les deux.

Ce qu'il fait réellement sous le capot est un peu complexe, et il utilise en fait différentes approches en fonction de ce qu'il peut dire sur vos tables (index, etc.), mais l'une des idées de base est qu'il fait des sommes de contrôle CRC32 rapides sur des morceaux d'index , et si les sommes de contrôle ne correspondent pas, il examine ces enregistrements de plus près. Notez que cette méthode est beaucoup plus rapide que de marcher linéairement sur les deux index et de les comparer.

Cependant, cela ne vous fait qu'une partie du chemin. Étant donné que les commandes générées sont destinées à synchroniser une réplique avec son maître, elles remplacent simplement le contenu actuel de la réplique pour tous les enregistrements différents. En d'autres termes, les commandes générées modifient all champs de l'enregistrement (pas seulement ceux qui ont changé). Donc, une fois que vous utilisez pt-table-sync pour trouver les différences, vous devez encapsuler les résultats dans quelque chose pour examiner les différents enregistrements en comparant chaque champ de l'enregistrement.

Mais pt-table-sync fait ce que vous saviez déjà être la partie la plus difficile :détecter les différences, vraiment vite. C'est écrit en Perl; la source doit fournir un bon fil d'Ariane.