Amazon RDS MySQL에서 ‘통신 패킷을 읽는 중 오류 발생’ 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 6일

Amazon RDS MySQL에서 ‘통신 패킷을 읽는 중 오류 발생’ 오류가 발생했습니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

서버-클라이언트 연결이 끊어지거나 부적절하게 닫히거나 실패한 경우 Amazon Relational Database Service(Amazon RDS) MySQL은 aborted_clients 또는 aborted_connects의 상태 카운터를 증가시킵니다.

log_error_verbosity의 값이 2를 초과하면 RDS MySQL은 오류 로그에 다음 정보를 기록합니다.

[Warning] Aborted connection xxx to db: '<database name>' user: '<user name>' host: '<host IP>' (Got an error reading communication packets)

이 경고는 aborted_clients 또는 aborted_connects 지표 값에 대한 상태 카운터가 증가할 때마다 트리거됩니다. Amazon RDS는 데이터베이스 오류 로그를 사용해 이 정보를 검색합니다. 자세한 내용은 MySQL 서버 웹 사이트에서 통신 오류 및 중단된 연결을 참조하세요.

중단된 연결 경고를 트리거할 수 있는 요소는 다음과 같습니다(이에 국한되지는 않음).

  • 클라이언트 또는 드라이버 비호환성
  • 유휴 연결을 닫거나 연결을 차단할 수 있는 방화벽 또는 프록시.
  • 클라이언트-서버 연결의 부적절한 종료로 인해 Amazon RDS MySQL 내에서 휴면 연결 수가 더 많아짐.
  • wait_timeout 또는 interactive_timeout 임계값을 초과하는 유휴 연결
  • 연결을 부적절하게 종료하는 클라이언트 애플리케이션.
  • 연결 패킷을 가져올 때 connect_timeout 초 임계값을 초과하는 클라이언트 연결.
  • max_allowed_packet 파라미터 값이 초과되었습니다. 인스턴스가 Amazon RDS MySQL에 할당한 것보다 많은 메모리를 쿼리가 필요로 하는 경우 중단된 연결 경고가 트리거됩니다.

해결 방법

Amazon RDS for MySQL에서 중단된 연결 오류를 수신하면 사용하는 MySQL 파라미터 값을 검토해야 합니다. 문제의 근본 원인을 파악한 후 MySQL 오류 로그를 모니터링하면서 파라미터를 업데이트하고 새 값을 테스트합니다.

Amazon RDS에서 중단된 연결 오류를 해결할 때 다음 방법을 고려하세요.

  • Amazon RDS 파라미터 그룹의 기본값을 사용하고 있는지 확인합니다. 연결 시간 초과와 관련된 파라미터의 기본값은 DB 인스턴스에 적합하지 않을 수 있습니다. 이러한 파라미터에 대한 자세한 내용은 Amazon RDS for MySQL에 대한 파라미터를 구성하는 모범 사례연결 시간 초과와 관련된 파라미터 단원을 참조하세요.
  • connect_timeout에 더 높은 값을 설정하여 중단된 연결 오류 메시지의 발생을 줄이는 데 도움이 되는지 확인합니다. 이 파라미터는 잘못된 핸드셰이크로 응답하기 전에 MySQL 서버 인스턴스가 대기해야 하는 시간(초 단위)을 지정합니다.
  • interactive_timeoutwait_timeout을 수정합니다. 연결 풀링(예: Java)을 사용하는 애플리케이션의 시간 초과는 연결 풀 설정과 일치해야 합니다.
  • 인스턴스가 큰 쿼리를 처리해야 하는 경우 max_allowed_packet 값을 늘립니다. 행에 클라이언트의 max_allowed_packet 값보다 많은 데이터가 있는 경우 오류가 보고됩니다. 큰 BLOB 열이나 긴 문자열을 사용하는 경우 이 값을 늘립니다. 자세한 내용은 Amazon RDS for MySQL에 대한 파라미터를 구성하는 모범 사례max_allowed_packet 단원을 참조하세요.
  • Amazon RDS for MySQL 연결이 제대로 종료되었는지 확인합니다. 데이터베이스를 종료하기 전에 클라이언트 애플리케이션에서 mysql_close() 함수를 호출해야 합니다.

문제 해결 팁

중단된 연결 오류 메시지가 계속 표시되면 다음 문제 해결 팁을 시도해보세요.

  • 성능 개선 도우미를 활성화하여 경고를 일으키는 SQL 문의 기간을 검색합니다.
  • 클라이언트를 실행하는 시스템에서 tcpdump 명령을 실행하여 샘플 패킷 캡처를 테스트합니다. 예를 들면 다음과 같습니다.
sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?