Rozwiązywanie problemów z łącznością w usłudze Azure Database for MySQL — serwer elastyczny
Program MySQL Community Edition zarządza połączeniami przy użyciu jednego wątku na połączenie. W związku z tym każde połączenie użytkownika pobiera dedykowany wątek systemu operacyjnego w procesie mysqld.
Istnieją potencjalne problemy związane z tego typu obsługą połączeń. Na przykład użycie pamięci jest stosunkowo wysokie, jeśli istnieje duża liczba połączeń użytkowników, nawet jeśli są bezczynne połączenia. Ponadto podczas pracy z tysiącami połączeń użytkowników istnieje wyższy poziom wewnętrznej rywalizacji o serwer i przełączanie kontekstu.
Diagnozowanie typowych błędów łączności
Za każdym razem, gdy wystąpienie usługi Azure Database for MySQL — elastyczny serwer ma problemy z łącznością, pamiętaj, że problemy mogą istnieć w dowolnej z trzech warstw: urządzenia klienckiego, sieci lub wystąpienia serwera elastycznego usługi Azure Database for MySQL.
W związku z tym za każdym razem, gdy diagnozujesz błędy łączności, pamiętaj, aby wziąć pod uwagę pełne szczegóły:
- Klient, w tym:
- Konfiguracja (lokalna, maszyna wirtualna platformy Azure itp. lub maszyna DBA).
- System operacyjny.
- Oprogramowanie i wersje.
- Parametry połączenia i wszystkie dołączone parametry.
- Topologia sieci (ten sam region? ta sama reguła zapory az? routing).
- Pula połączeń (parametry i konfiguracja), jeśli jest używana.
Ważne jest również, aby określić, czy problem z łącznością z bazą danych ma wpływ na pojedyncze urządzenie klienckie, czy kilka urządzeń klienckich. Jeśli błędy mają wpływ tylko na jednego z kilku klientów, prawdopodobnie problem dotyczy tego klienta. Jeśli jednak wszyscy klienci napotykają ten sam błąd, jest bardziej prawdopodobne, że problem występuje po stronie serwera bazy danych lub z siecią między nimi.
Należy również rozważyć potencjalne przeciążenie obciążenia, zwłaszcza jeśli aplikacja otworzy wzrost liczby połączeń w krótkim czasie. Aby to zbadać, możesz użyć metryk, takich jak "Łączne połączenia", "Aktywne połączenia" i "Przerwane połączenia".
Podczas nawiązywania łączności z urządzenia klienckiego lub aplikacji pierwsze ważne wywołanie w programie mysql polega na pobraniuaddrinfo, który wykonuje tłumaczenie DNS z punktu końcowego dostarczonego na adres IP. Jeśli uzyskanie adresu zakończy się niepowodzeniem, program MySQL wyświetli komunikat o błędzie, taki jak "BŁĄD 2005 (HY000): Nieznany host serwera MySQL "mysql-example.mysql.database.azure.com" (11)" i numer na końcu (11, 110 itp.).
Kody błędów po stronie klienta 2005
W poniższej tabeli są wyświetlane krótkie uwagi dotyczące niektórych kodów po stronie klienta 2005.
KOD BŁĘDU 2005 | Uwagi |
---|---|
(11) "EAI_SYSTEM — błąd systemu" | Po stronie klienta występuje błąd podczas rozpoznawania nazw DNS. Nie jest to problem z serwerem elastycznym usługi Azure Database for MySQL. Aby rozwiązać problemy, użyj polecenia dig/nslookup na kliencie. |
(110) "ETIMEDOUT — przekroczono limit czasu połączenia" | Wystąpił limit czasu podczas nawiązywania połączenia z serwerem DNS klienta. Nie jest to problem z serwerem elastycznym usługi Azure Database for MySQL. Aby rozwiązać problemy, użyj polecenia dig/nslookup na kliencie. |
(0) "nazwa nieznana" | Określona nazwa nie była rozpoznawana przez system DNS. Sprawdź dane wejściowe na kliencie. Prawdopodobnie nie jest to problem z serwerem elastycznym usługi Azure Database for MySQL. |
Drugie wywołanie w bazie danych mysql dotyczy łączności gniazda i podczas przeglądania komunikatu o błędzie, takiego jak "BŁĄD 2003 (HY000): Nie można nawiązać połączenia z usługą Azure Database for MySQL — elastyczny serwer na "mysql-example.mysql.database.azure.com" (111)", numer na końcu (99, 110, 111, 113 itp.).
Kody błędów po stronie klienta 2003
W poniższej tabeli są wyświetlane krótkie uwagi dotyczące niektórych kodów po stronie klienta 2003.
KOD BŁĘDU 2003 | Uwagi |
---|---|
(99) "EADDRNOTAVAIL — nie można przypisać żądanego adresu" | Ten błąd nie jest spowodowany przez serwer elastyczny usługi Azure Database for MySQL, a nie po stronie klienta. |
(110) "ETIMEDOUT — przekroczono limit czasu połączenia" | Wystąpił limit czasu nawiązywania połączenia z podanym adresem IP. Prawdopodobnie problem z zabezpieczeniami (regułami zapory) lub siecią (routingiem). Zazwyczaj nie jest to problem z usługą Azure Database for MySQL — serwer elastyczny. Aby rozwiązać problemy, użyj nc/telnet/TCPtraceroute na urządzeniu klienckim. |
(111) "ECONNREFUSED - Odmowa połączenia” | Podczas gdy pakiety dotarły do serwera docelowego, serwer odrzucił połączenie. Może to być próba nawiązania połączenia z niewłaściwym serwerem lub niewłaściwym portem. Może się to również wiązać z tym, że usługa docelowa (azure Database for MySQL — elastyczny serwer) nie działa, odzyskuje dane po przejściu w tryb failover lub przechodzi odzyskiwanie po awarii, a nie akceptuje jeszcze połączeń. Ten problem może znajdować się po stronie klienta lub po stronie serwera. Aby rozwiązać problemy, użyj nc/telnet/TCPtraceroute na urządzeniu klienckim. |
(113) "EHOSTUNREACH — host nieosiągalny" | Tabela routingu urządzenia klienckiego nie zawiera ścieżki do sieci, w której znajduje się serwer bazy danych. Sprawdź konfigurację sieci urządzenia klienckiego. |
Inne kody błędów
Krótkie uwagi dotyczące niektórych innych kodów błędów związanych z problemami występującymi po pomyślnym nawiązaniu połączenia sieciowego z serwerem bazy danych są wyświetlane w poniższej tabeli.
Kod błędu | Uwagi |
---|---|
BŁĄD 2013: „Utracono połączenie z serwerem MySQL” | Połączenie zostało nawiązane, ale zostało utracone później. Może się tak zdarzyć, jeśli próbujesz nawiązać połączenie z czymś, co nie jest programem MySQL (na przykład przy użyciu klienta MySQL w celu nawiązania połączenia z protokołem SSH na porcie 22). Może się to również zdarzyć, jeśli administrator zakończy sesję. Może się to również zdarzyć, jeśli baza danych upłynął limit czasu sesji. Może też odwoływać się do problemów na serwerze bazy danych po nawiązaniu połączenia. Może się to zdarzyć w dowolnym momencie w okresie istnienia połączenia klienta. Może to wskazywać, że baza danych miała poważny problem. |
BŁĄD 1040 „Zbyt wiele połączeń” | Liczba połączonych klientów bazy danych jest już na skonfigurowanej maksymalnej liczbie. Należy ocenić, dlaczego tak wiele połączeń jest nawiązanych z bazą danych. |
BŁĄD 1045 "Odmowa dostępu dla użytkownika" | Klient podał nieprawidłową nazwę użytkownika lub hasło, więc baza danych odmówiła dostępu. |
BŁĄD 2006 „Serwer MySQL zniknął” | Podobnie jak wpis BŁĄD 2013 "Utracono połączenie z serwerem MySQL" w poprzedniej tabeli. |
BŁĄD 1317 "Wykonywanie zapytania zostało przerwane" | Błąd, który klient otrzymuje, gdy użytkownik podstawowy zatrzymuje zapytanie, a nie połączenie. |
BŁĄD 1129 "Host '1.2.3.4' jest zablokowany z powodu wielu błędów połączenia" | Odblokowywanie za pomocą polecenia "mysqladmin flush-hosts" — wszyscy klienci na jednej maszynie zostaną zablokowani, jeśli jeden klient tej maszyny spróbuje kilka razy użyć nieprawidłowego protokołu do nawiązania połączenia z programem MySQL (telnetting z portem MySQL jest jednym z przykładów). Jak mówi komunikat o błędzie, administrator bazy danych musi uruchomić FLUSH HOSTS; polecenie w celu wyczyszczenia problemu. |
Uwaga
Aby uzyskać więcej informacji na temat błędów łączności, zobacz wpis w blogu Badanie problemów z połączeniem z usługą Azure Database for MySQL — serwer elastyczny.