W niektórych przypadkach podczas uruchamiania MySQL na Amazon RDS (lub w innym miejscu) może być konieczne FLUSH
wszystkie host
rekordy z MySQL. Zazwyczaj jest to wymagane, gdy błąd "Host 'host_name' is blocked"
wystąpi, co uniemożliwi dodatkowe połączenia z tego konkretnego host_name
.
host_name blocked
błąd występuje, gdy liczba max_connect_errors
określony w konfiguracji MySQL jest przekroczony, co oznacza, że dany host próbował połączyć się zbyt wiele razy bez powodzenia. Jest to środek bezpieczeństwa stosowany przez MySQL, aby zapobiec nieuzasadnionym atakom ze strony hostów/użytkowników, którzy nie mają odpowiednich danych uwierzytelniających, ale czasami może się to zdarzyć przez pomyłkę i może wymagać rozwiązania przez opróżnienie hostów.
Co robią hosty opróżniające?
Z użytkownikiem MySQL z odpowiednimi uprawnieniami wykonuje FLUSH
oświadczenie, MySQL może wyczyścić tabele opróżniania, blokady i wewnętrzne systemy pamięci podręcznej w zależności od przekazanych w options
. W przypadku FLUSH HOSTS;
, MySQL opróżni pamięć podręczną hostów, co w praktyce oznacza, że zapis MySQL o tym, które hosty są aktualnie lub ostatnio połączone, zostanie zresetowany, umożliwiając dalsze połączenia z tych hostów.
Wykonywanie bezpośrednie FLUSH HOST
Chociaż może się okazać, że nie możesz całkowicie połączyć się z MySQL, w niektórych przypadkach możliwe jest, że system „zapisze” gniazdo połączenia, które jest dostępne tylko dla głównego lub root
konto.
Dla Amazon RDS
, ta nazwa użytkownika jest zwykle dostępna w konsoli zarządzania jako domyślna lub „Nadrzędna”. Spróbuj połączyć się z serwerem MySQL przy użyciu tej podstawowej nazwy użytkownika.
Jeśli możesz się połączyć, opróżnienie hostów jest tak proste, jak uruchomienie FLUSH HOSTS;
Instrukcja MySQL:
FLUSH HOSTS;
Powinieneś teraz wyczyścić host_name blocked
błąd i móc połączyć się ze standardowym kontem MySQL.
Zdalne opróżnianie hostów za pomocą MySQLAdmin
W przypadku, gdy nie możesz połączyć się z MySQL jako kontem głównym i nadal otrzymujesz blocked
błędy, następną opcją jest zdalne połączenie się z serwerem i wykonanie flush
polecenie za pomocą mysqladmin
narzędzie.
Aby to zrobić, musisz połączyć się z innym Instancja EC2 lub serwer, który ma dostęp do serwera RDS powodujący błąd.
Po połączeniu wykonaj następujące polecenie z odpowiednimi opcjami podstawionymi między <>
:
$ mysqladmin -h <RDS_ENDPOINT_URL> -P <PORT> -u <USER> -p flush-hosts
Jeśli się powiedzie, flush-hosts
polecenie zostanie wykonane zgodnie z oczekiwaniami i będziesz mógł teraz normalnie połączyć się z MySQL.
Ponowne uruchamianie instancji RDS
Ostatnią opcją, jeśli wszystko inne zawiedzie, jest po prostu zalogowanie się do panelu sterowania zarządzania RDS i ręczne ponowne uruchomienie instancji RDS, która powoduje błąd. To skutecznie zresetuje hosts cache
dla Ciebie, choć może to nie być idealne w warunkach produkcyjnych.