Consulte el Percona Toolkit de código abierto ---específicamente, el pt-table-sync utilidad.
Su objetivo principal es sincronizar una tabla MySQL con su réplica, pero dado que su salida es el conjunto de comandos MySQL necesarios para reconciliar las diferencias entre dos tablas, es una opción natural para comparar las dos.
Lo que realmente hace debajo del capó es un poco complejo, y en realidad usa diferentes enfoques dependiendo de lo que pueda decir sobre sus tablas (índices, etc.), pero una de las ideas básicas es que hace sumas de verificación CRC32 rápidas en fragmentos de los índices , y si las sumas de verificación no coinciden, examina esos registros más de cerca. Tenga en cuenta que este método es mucho más rápido que recorrer ambos índices linealmente y compararlos.
Sin embargo, solo te lleva una parte del camino. Debido a que los comandos generados están destinados a sincronizar una réplica con su maestro, simplemente reemplazan el contenido actual de la réplica para todos los registros diferentes. En otras palabras, los comandos generados modifican all
campos en el registro (no solo los que han cambiado). Entonces, una vez que use pt-table-sync
para encontrar las diferencias, debe envolver los resultados en algo para examinar los diferentes registros comparando cada campo en el registro.
Pero pt-table-sync
hace lo que ya sabía que era la parte difícil:detectar diferencias, de verdad rápido. Está escrito en Perl; la fuente debe proporcionar buenas migas de pan.