W replikacji MySQL Master / Slave, co by się stało, gdybym napisał do Slave?

17

Kilka pytań

  • Czy pozycja Slave pozostanie, dopóki nie zostanie wstawiona / zaktualizowana / usunięta tabela w Master, która mogłaby wpłynąć na Slave?

  • Jeśli nie, w jaki sposób mam się upewnić, że Slave jest zsynchronizowany z Masterem idącym naprzód (poprzez usunięcie wpisu Slave lub ręczne skopiowanie tego wpisu do Master)?

  • Co najważniejsze, jak wykryć, że tabele nie są zsynchronizowane?

kfmfe04
źródło
proszę poprawnie wyjaśnić swoje pytanie ...
Abdul Manaf
1
Czy relacja master / slave nie jest jednokierunkową synchronizacją między master a slave, ale nie odwrotnie? Pytam, co by się stało, gdybyś napisał do niewolnika w tego rodzaju ustawieniach.
kfmfe04,

Odpowiedzi:

14

Tak długo, jak nie wykonujesz żadnych instrukcji INSERT / UPDATE / DELETE bezpośrednio w Slave, twój Slave powinien działać dobrze. W przeciwnym razie replikacja MySQL może się zepsuć, jeśli wstawisz nowy wiersz w mydb.mytable do urządzenia podrzędnego, a za pośrednictwem replikacji urządzenie podrzędne później wykryje WSTAW wiersz do pliku mydb.mytable przy użyciu tego samego klucza podstawowego. Powoduje to błąd 1062 (duplikat klucza).

Jedynym sposobem na napisanie do Slave bez przerywania replikacji MySQL jest:

  • Master ma bazy danych db1, db2, db3
  • Slave replikuje bazy danych db1, db2, db3 z Master
  • Biegniesz CREATE DATABASE db4;na Slave
  • INSERTs / UPDATEs / DELETE wykonuje się tylko dla db4 w Slave
  • Nie wykonujesz WSTAWIANIA / AKTUALIZACJI / USUWANIA tylko dla db1, db2, db3 w Slave

Aby wykryć, że Master i Slave nie są zsynchronizowane bez pobierania narzędzi, wybierz dowolną tabelę i uruchom TABELĘ KONTROLI stosunku do tabeli w Master i kopii tej samej tabeli Slave.

PRZYKŁAD

Jeśli masz tabelę mydb.mytable, uruchom przeciwko niej komendę:

mysql> CHECKSUM TABLE mydb.mytable;

Jeśli wartości nie są takie same, oznacza to, że coś nie jest zsynchronizowane.

Jeśli chcesz przejrzeć masę kilku stolików, możesz obniżyć MAATKIT Percony. Będziesz potrzebować dwóch konkretnych narzędzi (Percona ma również Percona Toolkit, który oni sami opracowali z MAATKIT, który jest teraz promowany bardziej)

lub

pt-table-checksumwykona TABELĘ KONTROLNĄ dla wszystkich tabel na Master i Slave. Możesz go skonfigurować tak, aby wykonywał wszystkie bazy danych tylko na określonych.

pt-table-syncmożna uruchomić na Slave na dowolnym stole. Korzystając z opcji --print i --sync-to-master, możesz zobaczyć, jakie instrukcje SQL muszą zostać wykonane na Slave, aby idealnie pasowały do ​​Master. To narzędzie nie działa z tabelą, w której brakuje KLUCZA PODSTAWOWEGO lub KLUCZA UNIKALNEGO.

Używam MAATKIT od lat. Wciąż robię. Nie wypróbowałem jeszcze Percona Toolkit, ale jestem pewien, że powinien być tej samej jakości co MAATKIT.

RolandoMySQLDBA
źródło
ty za szczegółową odpowiedź. Myślałem, że mam więcej pytań, ale myślę, że twoje odpowiedzi obejmowały wszystkie przypadki (pt-table-sync wydaje się bardzo przydatny).
kfmfe04,