У меня 1 мастер и 2 подчиненных. Я использую MySQL 5.1.42 на всех серверах. Я пытаюсь использовать контрольную сумму mk-table, чтобы убедиться, что их данные синхронизированы, но получаю неожиданные результаты на одном из ведомых устройств.
Сначала я генерирую контрольные суммы на мастере следующим образом:
mk-table-checksum h=localhost --databases MYDB --tables {$table_list} --replicate=MYDB.mk_checksum --chunk-size=10M
Насколько я понимаю, это запускает запросы контрольной суммы на ведущем устройстве, которые затем распространяются через обычную репликацию на ведомые устройства. Таким образом, блокировка не требуется, потому что ведомые устройства будут находиться в том же логическом моменте времени, когда они запускают запросы контрольной суммы на себе. Это верно?
Затем, чтобы убедиться, что контрольные суммы совпадают, я запускаю это на мастере:
mk-table-checksum --databases MYDB --replicate=IRC.mk_checksum --replicate-check 1 h=localhost,u=maatkit,p=xxxx
Если есть отличия, ремонтирую рабы так:
mk-table-sync --execute --verbose --replicate IRC.mk_checksum h=localhost,u=maatkit,p=xxxx
После всего этого я восстановил оба ведомых устройства с помощью mk-table-sync. Однако каждый раз, когда я запускаю эту последовательность (после того, как все уже было восстановлено), одно ведомое устройство идеально синхронизировано, но одно ведомое устройство всегда имеет несколько несинхронизированных таблиц. Я на 99,999% уверен, что данные на подчиненных устройствах совпадают, поскольку я все восстановил, а таблицы даже не обновлялись на главном сервере между запусками скрипта контрольной суммы. Что может привести к тому, что несколько таблиц всегда будут отображаться не синхронно только на одном из ведомых устройств? Я застрял. Вот результат:
Differences on h=x.x.x.x,p=...,u=maatkit
DB TBL CHUNK CNT_DIFF CRC_DIFF BOUNDARIES
IRC продукт 10 0 1product_id
> = 147377 Иproduct_id
<162085
IRC post_order_survey 0 0 1 1 = 1
IRC mk_heartbeat 0 0 1 1 = 1
IRC mailing_list 0 0 1 1 = 1
IRC honey_pot_log 0 0 1 1 = 1
IRC продукт 12 0 1product_id
> = 176793 Иproduct_id
<191501
IRC продукт 18 0 1product_id
> = 265041
IRC заказов 26 0 1order_id
> = 694472
IRC orders_product 6 0 1op_id
> = 935375
--replicate = MYDB.mk_checksum
--replicate = IRC.mk_checksum
Почему разница?
Вы случайно не отправили этот вопрос в список рассылки Maatkit? Похоже на недавнюю переписку там. Если бы это был не вы, возможно, вы смогли бы перехватить эту ветку. (Я предпочитаю отвечать там, здесь я не отслеживаю / не слежу / не контролирую).