Slave в репликации не успевает за мастером, если он сильно отстал
MySQL 5.6.13
~200 запросов в секунду
ROW-Based Replication
Если запустить slave со свежим дампом, т.е. когда разница в данных небольшая, он быстро догоняет мастера и дальше всё замечательно.
Если slave остановить на пару дней, а потом снова запустить, то он где-то минуты две очень бодренько начинает нагонять (высокая загрузка процессора, ввод-вывод, всё как положенно). А потом практически засыпает — загрузка процессора 1%, небольшой ввод-вывод, Seconds_Behind_Master очень медленно уменьшается, стоит на месте или даже увеличивается.
По производительности железо slave-а выше, версии софта идентичны. Ошибок в логах нет. Между серверами гигабит.
похоже разобрался
проблема в bcache — слил базу на чистый SSD и всё полетело.
очень странно
%iowait остался примерно такой же — 5.4
может у bcache проблемы с многопоточным доступом, т.к. в синтетике всё шоколадно.
в любом случае вопрос закрыт, MySQL не виноват :)
1. проверить, точно ли работает репликация. То есть не появилась ли какая-то ошибка SHOW SLAVE STATUS\G в переменной Last_Error
2. Проверить возраст бинари логов на мастере. Возможно они за 2 дня успевают удалиться.
1. точно работают, т.к. Relay_Log_File и Relay_Log_Pos растут. Ошибок нет.
2. бины на мастере точно есть, я кстати понял что за активность в первые минуты после запуска слейва — это он эти самые бины скачивает себе локально (relay-log).
т.е. репликация работает, но как будто её скорость чем-то сдерживается. Скорее всего связанно именно с ROW-Based, т.к. с обычными никогда не было проблем.