Сравнивая данные в 2 таблицы на разных серверах с контрольной суммой


Так что у меня была проблема, где мне нужно сравнить данные в 2 разные таблицы на двух разных серверах. Теперь, я знаю, что MySQL поддерживает контрольную сумму таблицы, но от моего тестирования и понимание, что это не надежный на сервере экземпляров и версий.

Поэтому я создал такой запрос:

$part = '@CRC := MD5(CONCAT_WS(\'#\', COALESCE(`'.
    implode('`, "#NULL#"), COALESCE(`', $this->_columns).
    '`, "#NULL#")))';
$sql1 = "SELECT COUNT(*) AS cnt, 
        SUM(CONV(SUBSTRING({$part}, 1, 4), 16, 10)) as a1, 
        SUM(CONV(SUBSTRING(@CRC, 5, 4), 16, 10)) as a2, 
        SUM(CONV(SUBSTRING(@CRC, 9, 4), 16, 10)) as a3, 
        SUM(CONV(SUBSTRING(@CRC, 13, 4), 16, 10)) as a4, 
        SUM(CONV(SUBSTRING(@CRC, 17, 4), 16, 10)) as a5, 
        SUM(CONV(SUBSTRING(@CRC, 21, 4), 16, 10)) as a6, 
        SUM(CONV(SUBSTRING(@CRC, 25, 4), 16, 10)) as a7, 
        SUM(CONV(SUBSTRING(@CRC, 29, 4), 16, 10)) as a8 
    FROM `dbname`.`tablename` 
    WHERE `id` >= $min AND `id` <= $max ";

Так что, по сути, это объединение каждой строки вместе (все столбцы каждой строки более конкретно) и тогда MD5ing их. Затем он ходит 4 hexbits за раз через MD5 и суммы их во всех строках (4 hexbits, чтобы позволить мне сделать огромные столы без необходимости беспокоиться о переполнены). Затем, я просто сравниваю результат этого запроса как таблицы, чтобы увидеть, если все то же самое.

Используя этот двоичный поиск, я могу довольно быстро определить, где изменения так что я могу их перенести.

Это на самом деле довольно эффективный, поэтому я не слишком обеспокоен этим. Что меня беспокоит, если это даже необходимо. Он кричит мне: "Ты делаешь это неправильно", но я не могу понять, чище способ вокруг него...

Каковы ваши мысли?



1180
8
задан 19 января 2011 в 09:01 Источник Поделиться
Комментарии
1 ответ

Мы используем МК-столик-контрольная сумма.

Это работает действительно здорово в мастер-раб контекст, в котором она также позволяет синхронизировать различия в обоих направлениях в зависимости от вашего выбора.

Saidly от того, что я видел, большинство людей это для репликации, и я не могу предоставить любую копирования/pasteable выходной, но если вы не знаете, это определенно стоит посмотреть. Если вы знаете, что я хочу услышать, почему это не работает для вас.

Чтобы получить общее представление по многим таблицам вы можете использовать что-то вроде МК-столик-контрольная сумма узел1 Узел2 | МК-Контрольная-фильтр

5
ответ дан 20 января 2011 в 02:01 Источник Поделиться