Jaki jest powód, dla którego host „nazwa_hosta” jest zablokowany w MySQL?

12

Kiedy używam niepoprawnego hasła do łączenia się z serwerem mysql, a liczba testów się kończy max_connect_errors, i okazuje się, że Aborted_connectspojawia się również jako liczba, którą testuję, ale host nadal nie jest zablokowany.

Tak robi Aborted_connectsnad max_connect_errorsówczesnego nazwa_hosta jest zablokowany?

użytkownik3157
źródło

Odpowiedzi:

8

W tym momencie może być konieczne uruchomienie hostów FLUSH i sprawdzenie, czy to się odblokowuje.

Dokumentacja MySQL mówi o hostach FLUSH:

  • Opróżnia tabele pamięci podręcznej hosta. Powinieneś opróżnić tabele hostów, jeśli niektórzy z Twoich hostów zmienią adres IP lub jeśli pojawi się komunikat o błędzie Host „nazwa_hosta” jest zablokowany. Gdy więcej niż więcej błędów max_connect_errors wystąpi kolejno dla danego hosta podczas łączenia się z serwerem MySQL, MySQL zakłada, że ​​coś jest nie tak i blokuje hostowi dalsze żądania połączenia. Opróżnianie tabel hosta umożliwia dalsze próby nawiązania połączenia z hosta. Patrz sekcja C.5.2.6, „Host 'nazwa_hosta” jest zablokowany ”. Możesz uruchomić mysqld z --max_connect_errors = 999999999, aby uniknąć tego komunikatu o błędzie.

Dlaczego host miałby zostać zablokowany na początku?

Według dokumentacji MySQL :

Jeśli pojawi się następujący błąd, oznacza to, że mysqld otrzymał wiele żądań połączenia od hosta „nazwa_hosta”, które zostały przerwane w środku: Host „nazwa_hosta” jest zablokowany z powodu wielu błędów połączenia. Odblokuj za pomocą „mysqladmin flush-hosts” Dopuszczalna liczba przerwanych żądań połączenia zależy od wartości zmiennej systemowej max_connect_errors. Po nieudanych żądaniach max_connect_errors mysqld zakłada, że ​​coś jest nie tak (na przykład, że ktoś próbuje się włamać) i blokuje hosta przed dalszymi połączeniami, dopóki nie wykonasz komendy mushqladmin flush-hosts lub wydasz instrukcję FLUSH HOSTS. Patrz sekcja 5.1.3, „Zmienne systemowe serwera”.

Domyślnie mysqld blokuje hosta po 10 błędach połączenia. Możesz dostosować wartość, uruchamiając serwer w następujący sposób:

shell> mysqld_safe --max_connect_errors=10000 &

Jeśli pojawi się ten komunikat o błędzie dla danego hosta, najpierw sprawdź, czy nie ma nic złego w połączeniach TCP / IP z tego hosta. Jeśli masz problemy z siecią, nie warto zwiększać wartości zmiennej max_connect_errors.

RolandoMySQLDBA
źródło
Nie wygląda na to, aby te błędy trafiały do ​​zwykłego dziennika błędów MySQL. Czy istnieje sposób, aby wyświetlić dziennik błędów połączenia blokującego hosta? Zwróciłem też uwagę na „sukcesywnie” powyżej. Potrzebujesz tylko udanego połączenia pomiędzy? Czy powinienem po prostu zadać nowe pytanie?
Marc L.
1

Jedną z przyczyn takiej blokady jest sytuacja, w której przypadkowa osoba na hoście decyduje się na monitorowanie MySQL i konfiguruje telnet do portu MySQL na zdalnym serwerze. Przy wystarczającej liczbie wywołań telnet host jest następnie blokowany przed dalszym dostępem do tego serwera MySQL. W przeciwieństwie do niektórych serwerów, MySQL nie odblokowuje automatycznie dostępu po rozsądnym czasie: administrator serwera musi uderzyć MySQL w głowę.

Richard
źródło