ASPEKT nr 1: Replikacja
Nie wydaje mi się
replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
stanowić całość.
Inni też się nad tym zastanawiali
Problem wynika z przetwarzania reguł replikacji zamówień. Zgodnie z dokumentacją MySQL dotyczącą reguł replikacji :
Jeśli podano jakieś opcje --replicate-rewrite-db, są one stosowane przed przetestowaniem reguł filtrowania --replicate- *.
Nawet dokumentacja MySQL na replicate-rewrite-db mówi:
Tłumaczenie nazw bazy danych jest wykonywane przed przetestowaniem reguł --replicate- *.
replicate-wild-do-tableJest egzekwowane po przepisać. Nie byłoby zaskoczeniem, gdyby to uporządkowanie w jakiś sposób narzuciło WSTAW do tabeli, która już zawiera dane.
Prawdopodobnie pytasz, skąd się wzięły dane?
ASPEKT 2: mysqldump
Robi mysqldump --single-transactionwydaje się być największym sposobem point-in-time wysypisk danych. Niestety, mysqldump --single-transactionma piętą achillesową: ALTER TABLE. Jeśli tabela podlega jakimkolwiek ALTER TABLEpoleceniom, takim jak a, DROP TABLEi CREATE TABLEktóre mogą zepsuć integralność transakcji, mysqldump próbował wykonać zrzut. Obcinanie tabeli (która jest DDL we Wszechświecie MySQL) oraz upuszczanie i dodawanie indeksów może również być tak samo destrukcyjne.
Więcej informacji na ten temat można znaleźć w najlepiej strzeżonym MySQLDump Secret MySQL Performance Blog . Właściwie zająłem się tym punktem w poprzednim pytaniu opisującym 12 poleceń, które mogą złamać integralność transakcji mysqldump: kopia zapasowa MySQL InnoDB
CAVEAT
EPILOG
Jeden lub oba aspekty mogły przyczynić się do wypuszczenia wiersza podczas mysqldump, który nie powinien istnieć z powodu reguł przepisywania lub izolacji mysqldump.
PROPOZYCJE
Zrobiłbym zrzut mysqlbinlog wszystkich dzienników przekazywania od początku mysqldump, aby zobaczyć wszystkie WSTAWKI przetwarzane przez Slave i sprawdzić, czy te wiersze już istnieją w Slave. Jeśli tak, prawdopodobnie możesz zrobić dwie rzeczy:
1: Pomiń wszystkie błędy klucza duplikatu
Po prostu dodaj to do my.cnf w Slave
[mysqld]
slave-skip-errors=1062
skip-slave-start
i zrestartuj mysql. Następnie uruchomićSTART SLAVE;
wszystkie błędy klucza duplikatu zostaną pominięte. Gdy Seconds_Behind_Masterdojdzie do 0, usuń te linie i uruchom ponownie mysql.
2: Pobierz narzędzia Percona
Potrzebne są narzędzia
Użyj ich, aby znaleźć różnice w Slave, a następnie je popraw