Назад | Перейти на главную страницу

Репликация MySQL: не распространяйте неудачные запросы на ведомые устройства

У меня есть простая настройка репликации MySQL с одним главным и двумя подчиненными. Иногда есть запросы, которые выполняются на Мастере, которые не работают из-за дублирования уникальных ключей или по другим причинам. Я вижу, что неудавшиеся запросы реплицируются на подчиненные серверы, что тоже вызывает ошибки. Это раздражает и довольно утомительно - приходить и исправлять это каждый раз, поскольку репликация останавливается каждый раз, когда возникает неверный запрос.

Мне кажется, что если запрос не выполняется на Мастере, MySQL не должен распространять его на Слэйвы. Можно ли настроить MySQL таким образом? Как? Я пробовал поискать в Google и просматривать документы MySQL, но не вижу этого.

Репликация MySQL происходит через binlog. В бинлог будут записаны только успешные транзакции, поэтому, если запрос не выполняется на мастере, он не появится в бинлоге. Это означает, что такие запросы не будут отображаться на репликах. Если у вас есть ошибки, такие как остановка репликации на slave1, потому что нет столбца для обновления (и т. Д.), Это означает, что ваш главный и подчиненные устройства отличаются. Вам следует установить percona-toolkit и проверить свои таблицы с помощью контрольной суммы таблицы pt.