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

Вопрос о репликации MySQL-Master-Master. Я много читал в Интернете, но есть проблема.

Источник данных:

А. MySQL 5.7. Часть моей. cnf о репликации:

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
log_bin_index = /var/log/mysql/mysql-bin.log.index
relay-log = /var/log/mysql/mysql-relay-bin
relay-log-index = /var/log/mysql/mysql-relay-bin.index
binlog_do_db = example
expire-logs-days = 7
auto_increment_increment = 2
auto_increment_offset = 1
log-slave-updates = 1

Б. MySQL 5.7. Часть my.cnf о репликации:

server-id = 2
log_bin = /var/log/mysql/mysql-bin. log
log_bin_index = /var/log/mysql/mysql-bin.log.index
relay-log = /var/log/mysql/mysql-relay-bin
relay-log-index = /var/log/mysql/mysql-relay-bin.index
binlog_do_db = example
expire-logs-days = 7
auto_increment_increment = 2
auto_increment_offset = 2
log-slave-updates = 1

Сервер A является активным (основным) сервером базы данных. Сервер B подключается, когда сервер A отключен/недоступен. В начале была собрана репликация Мастер-Мастер (репликация работала в обе стороны) и успешно проработала 2 дня, пока я не решил ее протестировать. Я начал блокировать доступ к серверу А, чтобы переключиться на сервер Б и обратно. После нескольких переключений появилась ошибка репликации 1062 (Не удалось выполнить событие Write_rows для таблицы...).

А теперь вопрос. Что неправильно настроено в моей конфигурации репликации? Я понимаю, что многое зависит от продукта и запросов к нему, но есть ли универсальный конфиг Мастер-Мастер?


person scorch    schedule 21.01.2021    source источник
comment
настройка вроде в порядке. Удостоверьтесь, что во время тестирования на трафик коммутатор db был синхронизирован.   -  person ROHIT KHURANA    schedule 21.01.2021
comment
Да, базы были идентичны. Было создано 2 новых сервера, все они установлены и настроены, и развернут тот же дамп базы данных.   -  person scorch    schedule 21.01.2021


Ответы (1)


Пожалуйста, рассмотрите следующие шаги для проверки подключения или отработки отказа:

предположим, что сервер A активен. Так

  • сначала включите только чтение на сервере A.
  • затем подождите пару секунд и дважды проверьте показать статус ведомого устройства.
  • если позиции не меняются. затем переместите трафик на сервер B.

Выполните те же действия для реверсирования трафика на сервере A.

person ROHIT KHURANA    schedule 21.01.2021
comment
Извините, но я не понимаю, зачем нужна эта проверка. Вы можете объяснить? Я уверен, что репликация будет работать при условии, что не будут внесены изменения. Я сделал точно такую ​​же проверку при условии, что оба сервера имеют права на запись и чтение. И два дня работал исправно. - person scorch; 21.01.2021
comment
это также зависит от логики приложения. Если приложение читает из БД, то пишет соответственно. Таким образом, если какая-либо транзакция не реплицируется, и приложение считывает устаревшие данные, поэтому новая запись будет соответственно вызывать проблему дублирования. - person ROHIT KHURANA; 21.01.2021