АСПЕКТ №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
після перезапису. Не дивно, якби це замовлення якось наклало ВСТУП на таблицю, у якій вже є дані.
Ви, напевно, запитуєте, як потрапили дані?
АСПЕКТ №2: mysqldump
Роблячи mysqldump --single-transaction
б , здається, найкращий спосіб на певний момент часу відвалів даних. На жаль, mysqldump --single-transaction
має ахілесову п'яту : ALTER TABLE
. Якщо таблиця підпорядковується будь-яким ALTER TABLE
командам, таким як a DROP TABLE
і CREATE TABLE
, які можуть порушити цілісність транзакції, mysqldump намагався виконати дамп. Структура таблиці (яка є DDL у Всесвіті MySQL) та видалення та додавання індексів може також бути таким же руйнівним.
Більше інформації про це ви можете знайти у найкращому збереженому MySQLDump Secret блозі MySQL . Я фактично звернувся до цього питання в минулому запитанні, в якому описував 12 команд, які можуть порушити цілісність транзакції mysqldump: Резервне копіювання MySQL InnoDB
КАВАТИ
ЕПІЛОГ
Один або обидва аспекти, можливо, сприяли тому, що рядок проскакує під час mysqldump, який не повинен був існувати через правила перезапису або переоцінку ізоляції mysqldump.
ПРОПОЗИЦІЇ
Я би зробив mysqlbinlog скидання всіх журналів ретрансляції з початку роботи mysqldump, щоб побачити всі ВСТАВКИ, які підлеглий обробляє, і перевірити, чи ці рядки вже існують на підлеглому. Якщо вони будуть, ви, ймовірно, можете зробити дві речі:
1: Пропустіть всі помилки дублюючого ключа
Просто додайте це до my.cnf на Рабі
[mysqld]
slave-skip-errors=1062
skip-slave-start
і перезапустити mysql. Потім бігайтеSTART SLAVE;
всі помилки повторюваних ключів будуть обійдені. Коли ви Seconds_Behind_Master
отримаєте 0, видаліть ці рядки та перезапустіть mysql.
2: Завантажте інструменти Percona
Потрібні інструменти є
Скористайтеся ними, щоб знайти відмінності в Рабі, а потім виправте їх