Mam MySQL (5.5) w konfiguracji master-slave i stworzyłem inny serwer slave.
Zatrzymałem pierwotnego niewolnika, zrzuciłem dane, skopiowałem i ponownie zaimportowałem i działało dobrze. Zauważyłem pozycję master_log oryginalnego slave i użyłem tych poleceń, aby ustawić go na nowym slave
CHANGE MASTER TO MASTER_HOST='<ipaddress>',
MASTER_USER='<username>', MASTER_PASSWORD='<password>',
MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000851',
MASTER_LOG_POS=15824150,
MASTER_CONNECT_RETRY=10;
Kiedy założyłem nowego niewolnika, dostałem
Last_IO_Error: Wystąpił błąd krytyczny 1236 z urządzenia master podczas odczytu danych z dziennika binarnego: „wpis zdarzenia dziennika przekroczył max_allowed_packet; Zwiększ max_allowed_packet na master '
Jednak kiedy założyłem pierwotnego niewolnika, wszystko wróciło do normy i jest teraz zsynchronizowane.
Więc pytania:
aktualna wartość to 16 mln, skąd mam wiedzieć, jak duży iść? (Wolałbym raczej unikać prób i błędów z serwerem produkcyjnym).
dlaczego muszę zwiększać wartość nadrzędną, skoro oryginalny slave radził sobie dobrze, czy problem może być naprawdę związany z nowym slave?
aktualizacja
Zwiększyłem pakiet max_allowed_packet do 1073741824, jak Rolando zasugerował dla mistrza, starego niewolnika i nowego niewolnika, i zrestartowałem je ( SET GLOBAL max_allowed_packet = 1073741824;
z jakiegoś powodu wydawało się, że nie biorą)
teraz ostatni błąd we / wy jest taki sam jak poprzednio, ale teraz widzę
Last_SQL_Error: Błąd odczytu dziennika przekazywania: Nie można przeanalizować pozycji zdarzenia dziennika przekazywania. Możliwe przyczyny to: dziennik binarny urządzenia nadrzędnego jest uszkodzony (można to sprawdzić, uruchamiając dziennik mysqlbinlog w dzienniku binarnym), dziennik przekaźnika urządzenia podrzędnego jest uszkodzony (można to sprawdzić, uruchamiając dziennik mysqlbinlog w dzienniku przekazywania), problem z siecią lub błąd w kodzie MySQL master lub slave. Jeśli chcesz sprawdzić dziennik binarny urządzenia nadrzędnego lub dziennik przekaźników urządzenia podrzędnego, będziesz mógł poznać ich nazwy, wydając „STATUS POKAŻ SLAVE” na tym urządzeniu podrzędnym.
Jeśli zrobię mysqlbinlog na pliku master, przewija on przeszłość z poleceniami całkiem szczęśliwie przez wieki - plik ma rozmiar 722M - jeśli zrobię to dla dziennika przekaźników slave, otrzymam
BŁĄD: Błąd w Log_event :: read_log_event (): „Sprawdzanie poprawności nie powiodło się”, data_len: 38916267, typ zdarzenia: 69
BŁĄD: Nie można odczytać wpisu z przesunięciem 253: Błąd w formacie dziennika lub błąd odczytu.
Sprawdziłem zmienne i zmiany zadziałały
mysql> pokaż zmienne LIKE '% max_allowed_packet%';
na nowym niewolniku pokazał max_allowed_packet
ORAZ slave_max_allowed_packet
gdzie, jak u mistrza, ma tylkomax_allowed_packet
więc sprawdziłem wersję na masterie:
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 1.1.6 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.11-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
i na nowym niewolniku
mysql> show variables LIKE '%version%';
+-------------------------+--------------------------------------+
| Variable_name | Value |
+-------------------------+--------------------------------------+
| innodb_version | 5.5.32 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.32-log |
| version_comment | MySQL Community Server (GPL) by Remi |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+--------------------------------------+
Czy te 2 wersje są zbyt daleko od siebie?