Ознакомьтесь с набором инструментов Percona с открытым исходным кодом, в частности, утилитой pt-table-sync .
Его основная цель состоит в том, чтобы синхронизировать таблицу MySQL с ее репликой, но поскольку ее вывод - это набор команд MySQL, необходимых для согласования различий между двумя таблицами, это естественно подходит для сравнения двух таблиц.
То, что он на самом деле делает под капотом, немного сложно, и он на самом деле использует разные подходы в зависимости от того, что он может сказать о ваших таблицах (индексы и т. Д.), Но одна из основных идей заключается в том, что он делает быстрые контрольные суммы CRC32 для фрагментов индексов , и если контрольные суммы не совпадают, они более тщательно проверяют эти записи. Обратите внимание, что этот метод на намного быстрее, чем линейный обход обоих индексов и сравнение их.
Впрочем, это только часть пути. Поскольку сгенерированные команды предназначены для синхронизации реплики с ее ведущей, они просто заменяют текущее содержимое реплики для всех отличающихся записей. Другими словами, сгенерированные команды изменяют all
поля в записи (а не только те, которые изменились). Поэтому, когда вы используете pt-table-sync
для нахождения различий, вам нужно будет обернуть результаты во что-то, чтобы изучить различные записи, сравнивая каждое поле в записи.
Но pt-table-sync
делает то, что, как вы уже знали, является сложной частью: обнаружение различий, действительно быстро. Это написано на Perl; Источник должен обеспечить хорошие хлебные крошки.