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 등)와 같은 오류 메시지를 표시합니다.
클라이언트 쪽 오류 2,005개 코드
일부 클라이언트 쪽 오류 2,005 코드에 대한 빠른 참조 정보는 다음 표에 나와 있습니다.
오류 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의 두 번째 호출은 소켓 연결을 사용하며 "ERROR 2003(HY000): 'mysql-example.mysql.database.azure.com'(111)"의 Azure Database for MySQL 유연한 서버에 연결할 수 없습니다. 끝 번호(99, 110, 111, 113 등).
클라이언트 쪽 오류 2,003개 코드
일부 클라이언트 쪽 오류 2,003 코드에 대한 빠른 참조 정보는 다음 표에 나와 있습니다.
오류 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 유연한 서버의 연결 문제 조사 블로그 게시물을 참조하세요.