Mysql 1062 Duplicate entry for key PRIMARY при репликации

Такая ошибка в Mysql происходит по причине того, что на реплике уже существует запись, которая пришла с мастера.

При просмотре состояния репликации:

mysql> SHOW SLAVE STATUS\G
Вы увидите такую проблему:
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '115846' for key 'PRIMARY'' on query. Default database: 'db'. Query: 'INSERT INTO some_table ...
Вариантов решения существует несколько.

1. Пропустить ошибку

Можно заставить Mysql пропустить эту ошибку и продолжить репликацию. Для этого нужно выполнить такой запрос на реплике:

mysql> STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

Такой метод стоит использовать только в исключительных ситуациях. Если проблема повторяется, это плохой подход.

1. Пропускать подобные ошибки всегда

Если ошибки возникают периодически, но это не нарушает логику приложения, то можно использовать такую настройку в файле my.cnf (на слейве):

slave-skip-errors = 1062

Это позволит постоянно игнорировать подобные ошибки при репликации.

3. Игнорирование проблемных таблиц

Проблемы могут быть вызваны тем, что в репликации участвуют таблицы, которые нет необходимости реплицировать. Их можно исключить используя такую настройку в my.cnf (на мастере):

replicate_wild_ignore_table = playground.%

# Все таблицы из базы данные playground не будут участвовать в репликации

Таких инструкций может быть несколько:

replicate_wild_ignore_table = playground.%
replicate_wild_ignore_table = data.temp_%

# Кроме базы playground, будут также исключены все таблицы которые начинаются на "temp_" из базы data

Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень