Amazon RDS for MySQL 또는 Aurora MySQL과 호환 버전에서 "통신 패킷을 읽는 중 오류가 발생했습니다"라는 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

“통신 패킷을 읽는 중 오류가 발생했습니다”라는 오류가 발생했습니다. MySQL용 Amazon Relational Database Service(RDS) 또는 Amazon Aurora MySQL 호환 에디션 DB 인스턴스에서 이 오류를 해결하고 싶습니다.

간략한 설명

서버-클라이언트 연결이 끊어지거나, 잘못 닫히거나, 실패한 경우 Amazon RDS는 aborted_clients 또는 aborted_connects에 대한 상태 카운터를 증가시킵니다. aborted_clients 파라미터는 연결을 제대로 닫지 않고 클라이언트가 종료되어 중단된 연결 횟수를 설명합니다. aborted_connects 파라미터는 MySQL 서버 연결 시도 실패 횟수를 설명합니다.

log_error_verbosity는 오류 로그에 사용할 이벤트를 처리하기 위한 상세 정보를 지정합니다. 이 파라미터 값이 값 2를 초과하면 RDS for 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 서버 웹사이트의 통신 오류 및 연결 중단을 참조하세요.

연결 중단 경고를 트리거할 수 있는 요인에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • 클라이언트 또는 드라이버 비호환성
  • 유휴 연결을 닫거나 연결을 차단할 수 있는 방화벽 또는 프록시
  • 클라이언트-서버 연결이 잘못 종료되어 RDS for MySQL 내부의 휴면 연결 수가 늘어납니다.
  • 연결을 부적절하게 종료하는 클라이언트 응용 프로그램 연결이 일정 시간 동안 유휴 상태인 경우 MySQL은 이러한 연결을 강제로 닫습니다. 그러면 연결 중단됨 메시지가 표시됩니다.
  • wait_timeout 또는 interactive_timeout 임곗값을 초과하는 유휴 연결
  • 연결 패킷을 가져올 때 connect_timeout초의 임곗값을 초과하는 클라이언트 연결
  • net_write_timeoutnet_read_timeout과 같은 파라미터의 값이 충분하지 않음
  • max_allowed_packet 파라미터 값을 초과했습니다. 값이 너무 작거나 쿼리에 RDS for MySQL에 할당된 메모리보다 많은 메모리가 필요한 경우 연결 중단됨 경고가 트리거됩니다.

해결 방법

RDS for MySQL 또는 Aurora MySQL-Compatible에서 연결 중단됨 오류가 발생하는 경우 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 섹션을 참조하세요.
  • net_write_timeoutnet_read_timeout 값을 늘립니다. 참고: 이러한 값은 wait_timeout과 동일한 값으로 설정할 수 있습니다.
  • RDS for MySQL 또는 Aurora MySQL 호환 연결이 제대로 닫혔는지 확인하세요. 데이터베이스를 종료하기 전에 클라이언트의 애플리케이션에서 mysql_close() 함수를 호출해야 합니다.

문제 해결 팁

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

sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

관련 정보

Amazon RDS DB 파라미터 그룹의 값을 수정하려면 어떻게 해야 하나요?

RDS DB 인스턴스의 DB 연결이 끊긴 이유는 무엇인가요?

로그를 보고 다운로드할 수 있도록 Aurora Serverless 클러스터에서 로그를 켜려면 어떻게 해야 하나요?