АСПЕКТ № 1: Репликация
Я не думаю что
replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
принадлежат друг другу.
Другие люди задавались вопросом об этом также
Проблема связана с обработкой правил репликации заказа. Согласно документации MySQL по правилам репликации :
Если были указаны какие-либо параметры --replicate-rewrite-db, они применяются до проверки правил фильтрации --replicate- *.
Даже документация MySQL по replicate-rewrite-db гласит:
Перевод имени базы данных выполняется до тестирования правил --replicate- *.
Применяется replicate-wild-do-table
после перезаписи. Не было бы удивительно, если бы этот порядок как-то наложил INSERT в таблицу, в которой уже есть данные.
Вы, наверное, спрашиваете, как эти данные попали туда?
АСПЕКТ № 2: mysqldump
Делая mysqldump --single-transaction
бы , кажется, самый лучший способ на определенный момент времени отвалов данных. К сожалению, mysqldump --single-transaction
есть Ахиллесова пята ALTER TABLE
. Если к таблице применяются какие-либо ALTER TABLE
команды, такие как DROP TABLE
и CREATE TABLE
, которые могут нарушить целостность транзакции, в которой mysqldump пытался выполнить дамп. Усечение таблицы (которая является DDL в MySQL Universe), удаление и добавление индексов может и быть таким же разрушительным.
Вы можете найти более подробную информацию об этом в MySQLDump 's Best Best MySQLDump Secret . Я фактически обратился к этому вопросу в прошлом вопросе, описывающем 12 команд, которые могут нарушить целостность транзакции mysqldump: резервная копия MySQL InnoDB
ПРЕДОСТЕРЕЖЕНИЕ
Эпилог
Один или оба аспекта, возможно, способствовали проскальзыванию строки во время mysqldump, которого не должно было быть из-за правил перезаписи или изолированной переопределенности mysqldump.
SUGGESTIONS
Я бы сделал дамп mysqlbinlog всех журналов ретрансляции с момента запуска mysqldump, чтобы увидеть все INSERT, которые будет обрабатывать ведомый, и посмотреть, существуют ли эти строки на ведомом. Если они это сделают, вы могли бы сделать две вещи:
1: пропустить все ошибки Duplicate Key
Просто добавьте это в my.cnf на Рабе
[mysqld]
slave-skip-errors=1062
skip-slave-start
и перезапустите MySQL. Затем бегиSTART SLAVE;
все ошибки дубликата ключа будут обойдены. Когда Seconds_Behind_Master
доберетесь до 0, удалите эти строки и перезапустите mysql.
2: скачать инструменты Percona
Инструменты, которые вам нужны
Используйте их, чтобы найти различия в Рабе, а затем исправить их