Ошибки MySQL репликации

By | August 28, 2010

Если у вас есть сервер, на котором настроена MySQL репликация, то рано или поздно вы столкнетесь с разного рода ошибками этой самой репликации. Ошибки могут быть вызваны как некорректной настройкой mysql-сервера, так и неправильной структурой самой БД.

В моей практике, наиболее распространенной ошибкой была 1062 Duplicate entry ‘…’ for key 1, которая возникает в случае нарушения уникальности какого-либо unique-поля таблицы. Если вы не можете изменить структуру таблиц так, чтобы избежать подобной ситуации, но, при этом, репликацию надо как-то запускать, есть простой выход – в настройки MySQL (my.cnf) добавить строку slave-skip-errors = 1062. С этого момента, сервер просто будет игнорировать именно эту ошибку и репликация останавливаться не будет. Но надо понимать, что при таком подходе вы будете терять часть данных, которые не попадут в реплицируемые таблицы из-за описанного выше конфликта.

А что делать если при репликации нет подобных “периодических” ошибок с одним и тем же error-кодом, а вместо них иногда всплывают другие, самые разнообразные коллизии? Например, в следствие порчи таблицы на одном из серверов, вылезла ошибка Query caused different errors on master and slave. Не заносить же error-коды всех этих ошибок в slave-skip-errors! Чтобы запустить репликацию после однократных ошибок можно выполнить следующий запрос:

Данный запрос установит счетчик пропуска ошибок равным единице (иными словами позволит пропустить одну ошибку) и запустит репликацию дальше. Еще раз обращаю внимание на то, что пропускать ошибки репликации нужно только в крайнем случае, если не хотите получить неконсистентность данных на серверах.