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-table
Jest 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-transaction
wydaje się być największym sposobem point-in-time wysypisk danych. Niestety, mysqldump --single-transaction
ma piętą achillesową: ALTER TABLE
. Jeśli tabela podlega jakimkolwiek ALTER TABLE
poleceniom, takim jak a, DROP TABLE
i CREATE TABLE
któ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_Master
dojdzie 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