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

Thank you for reading this post, don't forget to subscribe!

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

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

Вы уви­ди­те такую проблему:

Вари­ан­тов реше­ния суще­ству­ет несколько.

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

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

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

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

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

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

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

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

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

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

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