Azure Database for MySQL - 유연한 서버의 연결 문제 해결

적용 대상: Azure Database for MySQL - 단일 서버 Azure Database for MySQL - 유연한 서버

Important

Azure Database for MySQL 단일 서버는 사용 중지 경로에 있습니다. Azure Database for MySQL 유연한 서버로 업그레이드하는 것이 좋습니다. Azure Database for MySQL - 유연한 서버로 마이그레이션하는 방법에 대한 자세한 내용은 Azure Database for MySQL 단일 서버에 대한 새로운 소식을 참조하세요.

MySQL Community Edition은 연결당 하나의 스레드를 사용하여 연결을 관리합니다. 결과적으로 각 사용자 연결은 mysqld 프로세스에서 전용 운영 체제 스레드를 얻습니다.

이러한 형식의 연결 처리와 관련된 잠재적인 문제가 있습니다. 예를 들어, 유휴 연결이더라도 많은 수의 사용자 연결이 있는 경우 메모리 사용이 상대적으로 높습니다. 또한 수천 명의 사용자 연결로 작업할 때 더 높은 수준의 내부 서버 경합 및 컨텍스트 전환 오버헤드가 있습니다.

일반적인 연결 오류 진단

Azure Database for MySQL 유연한 서버의 인스턴스에 연결 문제가 발생할 때마다 클라이언트 디바이스, 네트워크 또는 Azure Database for MySQL 유연한 서버 인스턴스와 관련된 세 가지 계층 중 하나에 문제가 있을 수 있습니다.

따라서 연결 오류를 진단할 때마다 다음에 대한 전체 세부 정보를 고려해야 합니다.

  • 다음을 포함한 클라이언트:
    • 구성(온-프레미스, Azure VM 등 또는 DBA 컴퓨터).
    • 운영 체제.
    • 소프트웨어 및 버전.
  • 연결 문자열 및 포함된 매개 변수.
  • 네트워크 토폴로지(동일한 지역? 동일한 AZ? 방화벽 규칙? 라우팅).
  • 연결 풀(매개 변수 및 구성)(사용 중인 경우).

데이터베이스 연결 문제가 단일 클라이언트 디바이스 또는 여러 클라이언트 디바이스에 영향을 미치는지 여부를 확인하는 것도 중요합니다. 오류가 여러 클라이언트 중 하나에만 영향을 미치는 경우 해당 클라이언트에 문제가 있을 수 있습니다. 그러나 모든 클라이언트에서 동일한 오류가 발생한다면 문제는 데이터베이스 서버 쪽이나 그 사이의 네트워킹에 있을 가능성이 더 큽니다.

특히 애플리케이션이 매우 짧은 시간에 연결 급증을 여는 경우 워크로드 과부하의 가능성도 고려해야 합니다. "총 연결 수", "활성 연결 수" 및 "중단된 연결 수"와 같은 메트릭을 사용하여 이를 조사할 수 있습니다.

클라이언트 디바이스 또는 애플리케이션에서 연결을 설정할 때 mysql에서 가장 먼저 중요한 호출은 getaddrinfo로, 제공된 엔드포인트에서 IP 주소로 DNS 변환을 수행합니다. 주소 가져오기에 실패하면 MySQL은 "오류 2005(HY000): 알 수 없는 MySQL 서버 호스트 "mysql-example.mysql.database.azure.com"(11)" 및 끝의 숫자(11, 110 등)와 같은 오류 메시지를 표시합니다.

클라이언트 쪽 오류 2005 코드

다음 표에는 일부 클라이언트 쪽 오류 2005 코드에 대한 빠른 참조 정보가 나와 있습니다.

오류 2005 코드 참고
(11) "EAI_SYSTEM - 시스템 오류" 클라이언트 쪽의 DNS 확인에 오류가 있습니다. Azure Database for MySQL 유연한 서버 문제가 아닙니다. 클라이언트에서 dig/nslookup을 사용하여 문제를 해결합니다.
(110) "ETIMEDOUT - 연결 시간 초과" 클라이언트의 DNS 서버에 연결하는 동안 시간 제한이 발생했습니다. Azure Database for MySQL 유연한 서버 문제가 아닙니다. 클라이언트에서 dig/nslookup을 사용하여 문제를 해결합니다.
(0) "알 수 없음" 지정된 이름은 DNS에서 확인할 수 없습니다. 클라이언트에서 입력을 확인합니다. Azure Database for MySQL 유연한 서버에서는 문제가 되지 않을 가능성이 큽니다.

mysql의 두 번째 호출은 소켓 연결을 사용하고 "오류 2003(HY000): 'mysql-example.mysql.database.azure.com'의 Azure Database for MySQL 유연한 서버에 연결할 수 없음(111)"과 같은 오류 메시지를 보고 끝에 있는 숫자(99, 110, 111, 113 등)가 있을 때 발생합니다.

클라이언트 쪽 오류 2003 코드

다음 표에는 일부 클라이언트 쪽 오류 2003 코드에 대한 빠른 참조 정보가 나와 있습니다.

오류 2003 코드 참고
(99) "EADDRNOTAVAIL - 요청된 주소를 할당할 수 없음" 이 오류는 Azure Database for MySQL 유연한 서버에 의해 발생하는 것이 아니라 클라이언트 쪽에 있습니다.
(110) "ETIMEDOUT - 연결 시간 초과" 제공된 IP 주소에 연결하는 동안 시간 제한이 발생했습니다. 보안(방화벽 규칙) 또는 네트워킹(라우팅) 문제일 수 있습니다. 일반적으로 이는 Azure Database for MySQL 유연한 서버의 문제가 아닙니다. 문제를 해결하려면 클라이언트 디바이스에서 nc/telnet/TCPtraceroute를 사용합니다.
(111) "ECONNREFUSED - 연결이 거부됨" 패킷이 대상 서버에 도달하는 동안 서버가 연결을 거부했습니다. 잘못된 서버나 잘못된 포트에 연결하려는 시도일 수 있습니다. 이는 대상 서비스(Azure Database for MySQL 유연한 서버)가 다운되거나 장애 조치(failover)에서 복구되거나 크래시 복구가 진행 중이며 아직 연결을 수락하지 않는 것과 관련될 수도 있습니다. 이 문제는 클라이언트 쪽이나 서버 쪽에서 발생할 수 있습니다. 문제를 해결하려면 클라이언트 디바이스에서 nc/telnet/TCPtraceroute를 사용합니다.
(113) "EHOSTUNREACH - 호스트에 연결할 수 없음" 클라이언트 디바이스의 라우팅 테이블에는 데이터베이스 서버가 있는 네트워크에 대한 경로가 포함되지 않습니다. 클라이언트 디바이스의 네트워킹 구성을 확인합니다.

기타 오류 코드

데이터베이스 서버와의 네트워크 연결이 성공적으로 설정된 후 발생하는 문제와 관련된 일부 기타 오류 코드에 대한 빠른 참조 참고 사항은 다음 표에 나와 있습니다.

오류 코드 참고
오류 2013 "MySQL 서버 연결 끊김" 연결이 설정되었지만 나중에 끊어졌습니다. 이는 MySQL이 아닌 것에 대해 연결을 시도하는 경우에 발생할 수 있습니다(예: 포트 22에서 SSH에 연결하기 위해 MySQL 클라이언트 사용). 슈퍼 사용자가 세션을 종료하는 경우에도 발생할 수 있습니다. 데이터베이스가 세션 시간을 초과하는 경우에도 발생할 수 있습니다. 또는 연결이 설정된 후 데이터베이스 서버의 문제를 참조할 수 있습니다. 이는 클라이언트 연결이 지속되는 동안 언제든지 발생할 수 있습니다. 데이터베이스에 심각한 문제가 있음을 나타낼 수 있습니다.
오류 1040 "너무 많은 연결이 있습니다." 연결된 데이터베이스 클라이언트의 수가 이미 구성된 최대 수에 도달했습니다. 데이터베이스에 대해 그렇게 많은 연결이 설정된 이유를 평가해야 합니다.
오류 1045 "사용자에 대한 액세스가 거부됨" 클라이언트가 잘못된 사용자 이름 또는 암호를 제공하여 데이터베이스가 액세스를 거부했습니다.
오류 2006 "MySQL 서버가 사라짐" 이전 표의 오류 2013 "MySQL 서버 연결 끊김" 항목과 유사합니다.
오류 1317 "쿼리 실행이 중단됨" 연결이 아닌 기본 사용자가 쿼리를 중지할 때 클라이언트가 받는 오류입니다.
오류 1129 "많은 연결 오류로 인해 "1.2.3.4" 호스트가 차단됨" "mysqladmin flush-hosts"로 차단 해제" - 해당 컴퓨터의 한 클라이언트가 잘못된 프로토콜을 사용하여 MySQL에 연결하려고 여러 번 시도하면 단일 컴퓨터의 모든 클라이언트가 차단됩니다(MySQL 포트에 대한 텔넷 연결이 한 예임). 오류 메시지에서 알 수 있듯이 데이터베이스의 관리 사용자는 FLUSH HOSTS;를 실행하여 문제를 해결해야 합니다.

참고 항목

연결 오류에 대한 자세한 내용은 블로그 게시물 Azure Database for MySQL 유연한 서버의 연결 문제 조사를 참조하세요.

다음 단계

가장 중요한 질문에 대한 동료 대답을 찾거나 질문을 게시하거나 대답을 얻기 위해 Stack Overflow를 방문합니다.