Operacje na logach (binarnych) lub upgrade MySQL podczas replikacji M-M
Napisał: Patryk Krawaczyński
31/03/2012 w Administracja Brak komentarzy. (artykuł nr 341, ilość słów: 234)
P
odczas operacji na ustawieniach związanych z logami binarnymi lub logowaniem zdarzeń (np. zmiana expire_logs_days, general_log, slow_query_log), czy podnoszenie wersji serwera MySQL, który jest wpięty w replikację Master – Master, należy liczyć się, że operacja ta może zakończyć się na drugim serwerze wypięciem replikacji i komunikatem błędu podobnym do tego:
Last_Errno: 1580 Last_Error: Error 'You cannot 'ALTER' a log table if logging is enabled' on query. Default database: 'mysql'. Query: 'ALTER TABLE slow_log...
Spowodowane jest to faktem, że ustawienia dotyczące m.in. logów nie są replikowane między bazami. Na przykład program mysql_upgrade podnoszący wersję serwera wyłącza wstępnie logowanie oraz może wykonać ALTER
na tabelach mysql.general_log
i mysql.slow_log
. Jednak ten sam ALTER
nie zostanie wykonany już na drugim masterze, ze względu na cały czas włączone logi. W zależności czego dotyczy błąd – replikację naprawić możemy poprzez wyłączenie replikacji, wyłączenie logowania, włączenie replikacji i ponownym włączeniu logowania – tutaj przykład z slow_query_log
:
stop slave; set global slow_query_log = "off"; start slave; set global slow_query_log = "on";
lub po prostu pominięciem tego zapytania:
stop slave; set global sql_slave_skip_counter = 1; start slave;
Dlatego przed wykonywaniem tego rodzaju operacji należy pamiętać, aby ręcznie (o ile to możliwe) replikować tego rodzaju ustawienia na drugim masterze.
Więcej informacji: MySQL Bug #39133, MySQL Bug #43579, MySQL Bug #46638