Rozwiązywanie problemów z łącznością w usłudze Azure Database for MySQL — serwer elastyczny

DOTYCZY: Azure Database for MySQL — pojedynczy serwer usługi Azure Database for MySQL — serwer elastyczny

Ważne

Pojedynczy serwer usługi Azure Database for MySQL znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do serwera elastycznego usługi Azure Database for MySQL. Aby uzyskać więcej informacji na temat migracji do serwera elastycznego usługi Azure Database for MySQL, zobacz Co się dzieje z usługą Azure Database for MySQL — pojedynczy serwer?

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 serwera elastycznego usługi Azure Database for MySQL ma problemy z łącznością, pamiętaj, że problemy mogą istnieć w dowolnej z trzech warstw: urządzenia klienckiego, sieci lub wystąpienia elastycznego serwera 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.
  • ciąg Połączenie ion i wszystkie dołączone parametry.
  • Topologia sieci (ten sam region? ta sama reguła zapory az? routing).
  • pula Połączenie ion (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 bardzo krótkim czasie. Aby to zbadać, możesz użyć metryk, takich jak "Total Połączenie ions", "Active Połączenie ions" i "Aborted Połączenie ions".

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 błędó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. Jest to bardzo prawdopodobne, że nie występuje problem z elastycznym serwerem 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 serwerem elastycznym usługi Azure Database for MySQL na serwerze elastycznym "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 błędó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" TThere był przekroczeniem limitu 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 elastycznym serwerem usługi Azure Database for MySQL. 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 wyłączoną usługą docelową (serwer elastyczny usługi Azure Database for MySQL), odzyskiwaniem po przejściu w tryb failover lub przejściem przez odzyskiwanie awaryjne, a nie akceptowaniem 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 serwerem elastycznym usługi Azure Database for MySQL.

Następne kroki

Aby znaleźć odpowiedzi na najważniejsze pytania lub opublikować lub odpowiedzieć na pytanie, odwiedź witrynę Stack Overflow.