Я добавил дополнительный подчиненный сервер к существующей репликации MySQL. Главный сервер и старый подчиненный сервер работают нормально без каких-либо проблем, но новый добавленный сервер останавливается из-за следующей ошибки:
Last_SQL_Errno: 1032
Last_SQL_Error: не удалось выполнить событие Update_rows для таблицы xxx.email_events; Не удается найти запись в "email_events", Error_code: 1032; ошибка обработчика HA_ERR_KEY_NOT_FOUND; главный журнал событий mysqld-bin.000410, end_log_pos 368808733
После ремонта еще несколько часов.
Вопросы
Вы можете найти код предложения sql, например /usr/bin/mysqlbinlog -v --start-position=142743807 --stop-position=147399325 /data/mysql/data/master-bin.000010 > temp.log
Затем сравните разницу в базе данных ведомого и ведущего согласно temp.log на конкретной позиции. Затем обновите подчиненную базу данных.
Затем пропустите эту строку с помощью mysql -e "stop slave; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; start slave;";
Для людей, у которых это разовая ошибка, вы можете попробовать пропустить этот элемент:
УСТАНОВИТЬ ГЛОБАЛЬНЫЙ SQL_SLAVE_SKIP_COUNTER = 1;
НАЧАТЬ РАБ;
Вы можете установить следующее в my.cnf вашего ведомого устройства: [mysqld] slave-skip-errors = 1032
Но как говорится в документации: не используйте эту опцию, если вы полностью не понимаете, почему вы получаете ошибки. Одна из возможных причин этой ошибки может быть связана с «Slave_IO_Running: Yes», но «Slave_SQL_Running: No», что означает, что ваш процесс Slave IO работает и получение данных от Master, но не может быть выполнено из-за того, что процесс Slave_SQL_Running остановлен. Инструмент мониторинга, такой как Monyog, можно использовать для упреждающего мониторинга репликации и предупреждения об ошибке, задержке или отключении между главным и подчиненным серверами.