Z powodu następującego ostrzeżenia w mysqld.log
:
[Ostrzeżenie] Niebezpieczna instrukcja zapisana w dzienniku binarnym przy użyciu formatu instrukcji, ponieważ BINLOG_FORMAT = STATEMENT. Instrukcja jest niebezpieczna, ponieważ używa klauzuli LIMIT. Jest to niebezpieczne, ponieważ nie można przewidzieć zestawu zawartych wierszy.
Chcę zmienić format replikacji na MIXED
.
Ale zgodnie z dokumentem MySQL:
Przełączanie formatu replikacji w czasie wykonywania nie jest zalecane, jeśli istnieją tabele tymczasowe, ponieważ tabele tymczasowe są rejestrowane tylko w przypadku replikacji opartej na instrukcjach, natomiast w przypadku replikacji wierszowej nie są rejestrowane.
Pytanie brzmi: w jaki sposób mogę stwierdzić, czy istnieją tabele tymczasowe umożliwiające bezpieczne przełączanie formatu dziennika binarnego?
źródło
Odpowiedzi:
Ponieważ binlog będzie miał określony format w chwili, gdy to zrobisz, możesz zdecydować się nie grać razem z tymi dwoma formatami, chociaż MySQL (eh Oracle [wciąż nie może zrzucić mojego języka]) zbudował tę funkcję.
Aby zagrać całkowicie bezpiecznie bez ponownego uruchomienia mysql, spróbuj wykonać następujące czynności:
Spowoduje to pozostawienie ostatniego binlogu w formacie „MIXED”. Przedostatni (obok ostatniego) binlog istnieje po prostu przynosząc zamknięcie ostatniego binlogu, który był w poprzednim formacie.
Wszystkie istniejące sesje przed pierwszą
FLUSH LOGS;
zaczną zapisywać w ostatnim binlogu poUNLOCK TABLES;
wykonaniu.Spróbuj !!!
CAVEAT
Przyznawanie kredytu w miejscu, w którym należy się kredyt, moja odpowiedź naprawdę polega na udzieleniu odpowiedzi @ Jonathan . Poza tym po prostu zamykam i otwieram binlogi. Otrzymuje +1 za wydobycie tego jako pierwszego.
AKTUALIZACJA 2011-10-12 13:58 EDT
Jeśli robisz to aktywnemu Mistrzowi i istnieje co najmniej jeden Slave replikujący się z tego Mistrza, musisz się martwić, że dzienniki przekaźników mają również nowy format. Oto, co możesz zrobić:
Uruchom Slave
STOP SLAVE;
W trybie głównym uruchom następujące:
Uruchom Slave
START SLAVE;
Uruchamianie
STOP SLAVE;
iSTART SLAVE;
obracanie dzienników przekazywania powoduje, że nowe wpisy są replikowane w dowolnym formacie. Możesz także zastosować zmianę binlog_format w Slave.źródło
Aby zmienić binlog_format w czasie wykonywania, możesz:
Spowoduje to ustawienie wszystkich NOWYCH sesji na mieszany format binlog. Wszystkie istniejące sesje będą miały wszystko, co zostało ustawione wcześniej, aż do ich zakończenia.
Możesz także zrobić to
set session binlog_format = 'MIXED';
ręcznie, aby rozwiązać problemy z konkretną sesją.źródło