вторник, 14 августа 2012 г.

Ошибка 1062 Error 'Duplicate entry' при репликации MySQL

Собственно, вылезла такая ошибка в выводе команды show slave status\G:

***
Slave_IO_Running: Yes
Slave_SQL_Running: No
***
Last_Errno: 1062
Last_Error: Error 'Duplicate entry' ******
***

Репликация остановилась, работает только поток считывания данных (slave_io) с master-сервера. Это нормальная ситуация, ошибки случаются. По умолчанию, slave-сервер в случае ошибки останавливает поток slave_sql, который выполняет инструкции из бинарного лога от master-сервера. Предполагается, что администратор БД вручную исправит ошибку.
Причины бывают разные, в моем случае причиной была аварийная остановка slave-сервера.
Как исправить?
Пропустить запрос, вызывающий ошибку. Либо так:
mysql> SLAVE STOP; 
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
mysql> START SLAVE;
Либо указав в конфигурационном файле my.cnf в секции [mysqld] опцию:
slave-skip-errors = 1062
и перезапустить сервер, например, service mysqld restart. Также проверить вывод команды show slave status\G - бывают случаи, когда сервер mysqld запускается с опцией --skip-slave-start, которая запрещает автозапуск репликации при старте сервера.
В данном случае (slave-skip-errors = 1062) сервер будет игнорировать ВСЕ такие ошибки, возникающие при репликации. В первом варианте, только одну инструкцию пропустит из бинарного лога.

Литература:
http://dev.mysql.com/doc/refman/5.5/en/replication-options-slave.html#option_mysqld_slave-skip-errors

1 комментарий: