Amazon RDS for MySQL 또는 Aurora MySQL 호환 버전에서 "Got an error reading communication packets" 오류를 해결하려면 어떻게 해야 합니까?

4분 분량
0

"Got an error reading communication packets" 오류가 발생했습니다. Amazon Relational Database Service(RDS) for MySQL 또는 Amazon Aurora MySQL 호환 버전 DB 인스턴스에서 이 오류를 해결하고 싶습니다.

간략한 설명

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

log_error_verbosity는 오류 로그용 이벤트를 처리하기 위한 세부 사항을 지정합니다. 이 파라미터의 값이 2를 초과하는 경우 Amazon 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 서버 웹 사이트에서 Communication errors and aborted connections를 참조하세요.

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

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

해결 방법

Amazon RDS for MySQL 또는 Aurora MySQL 호환 버전에서 중단된 연결 오류가 발생하면 MySQL 파라미터 값을 검토하세요. 문제의 근본 원인을 파악한 후 MySQL 오류 로그를 모니터링하면서 파라미터를 업데이트하고 새 값을 테스트합니다.

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

  • Amazon RDS 파라미터 그룹의 기본값을 사용하고 있는지 확인합니다. 연결 시간 초과와 관련된 파라미터의 기본값은 DB 인스턴스에 적합하지 않을 수 있습니다. 자세한 내용은 Best practices for configuring parameters for Amazon RDS for MySQLParameters related to connectivity timeout 단원을 참조하세요.
  • connect_timeout에 더 높은 값을 설정하여 중단된 연결 오류 메시지의 발생을 줄이는 데 도움이 되는지 확인합니다. 이 파라미터는 잘못된 핸드셰이크로 응답하기 전에 MySQL 서버 인스턴스가 대기해야 하는 시간(초 단위)을 지정합니다.
  • interactive_timeout 및 **wait_timeout**을 수정합니다. 연결 풀링(예: Java)을 사용하는 애플리케이션의 시간 초과는 연결 풀 설정과 일치해야 합니다.
  • 인스턴스가 큰 쿼리를 처리해야 하는 경우 max_allowed_packet 값을 늘립니다. 행에 클라이언트의 max_allowed_packet 값보다 많은 데이터가 있는 경우 오류가 보고됩니다. 큰 BLOB 열이나 긴 문자열을 사용하는 경우 이 값을 늘립니다. 자세한 내용은 Best practices for configuring parameters for Amazon RDS for MySQLmax_allowed_packet 단원을 참조하세요.
  • net_write_timeoutnet_read_timeout 값을 늘립니다. 참고: 이러한 값은 wait_timeout과 동일한 값으로 설정할 수 있습니다.
  • Amazon 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 클러스터의 로그를 사용 설정하려면 어떻게 해야 하나요?