DEV WIKI
백엔드 · 오류·증상

MySQL server has gone away

MySQL 오류 2006을 식별하고 쿼리를 보내기 전에 연결을 사용할 수 없어진 이유를 확인하는 방법을 설명합니다.

빠른 답변

우선 확인할 원인
`MySQL server has gone away`는 오류 번호 2006, 심볼 `CR_SERVER_GONE_ERROR`입니다. 클라이언트가 서버에 쿼리를 보내지 못한 상태이므로 연결의 유휴 시간, `wait_timeout`, 애플리케이션의 연결 수명, 서버 재시작 여부를 먼저 확인합니다.
먼저 확인할 항목
현재 화면 또는 로그의 오류 번호가 `2006`인지 확인합니다.
적용 범위
현재 증상과 본문에 적은 관찰 조건이 함께 확인된 경우
출처
MySQL
출처 확인일
2026-08-29
최종 검토
2026-08-29
수정일
2026-08-29
관련 기술
오류·수정 제보 (새 창에서 열림)

현재 증상

  • 애플리케이션 오류 메시지

먼저 확인할 항목

현재 화면 또는 로그의 오류 번호가 `2006`인지 확인합니다.

현재 화면 또는 로그의 메시지가 `MySQL server has gone away`와 일치하는지 확인합니다.

심볼을 확인할 수 있으면 `CR_SERVER_GONE_ERROR`인지 확인합니다.

마지막 정상 쿼리 시각과 오류가 난 쿼리 시각의 간격을 확인합니다.

서버 uptime과 오류 로그에서 연결 사이에 서버가 종료되거나 다시 시작됐는지 확인합니다.

피해야 할 조치

주의

  • 연결이 유효한지 확인하지 않은 채 같은 연결 객체를 계속 재사용하지 않습니다.
  • 원인을 확인하기 전에 `wait_timeout`을 임의로 크게 늘리지 않습니다.
  • 실행 결과를 확인하지 않은 쓰기 작업을 자동 재시도하지 않습니다.

환경별 원인과 조치

오류 식별

현재 화면 또는 로그에서 오류 번호와 메시지 문자열을 확인합니다.

  • 오류 번호가 2006인지 확인합니다.
  • 메시지가 MySQL server has gone away와 일치하는지 확인합니다.
  • 코드에서 심볼을 확인할 수 있으면 CR_SERVER_GONE_ERROR인지 확인합니다.

이 값들이 일치하면 MySQL 클라이언트 오류 번호 2006으로 식별합니다.

MySQL 공식 문서에서는 CR_SERVER_GONE_ERROR를 클라이언트가 서버에 쿼리를 보내지 못한 상태로 구분합니다. 쿼리를 보낸 뒤 전체 응답을 받지 못했다면 오류 2013입니다. 해당 문구가 보이면 Lost connection to MySQL server during query 문서를 확인합니다.

확인 순서

  1. 마지막 정상 쿼리 시각과 오류 시각 사이의 유휴 시간을 확인합니다.
  2. 서버의 wait_timeout과 애플리케이션 연결 풀의 최대 연결 수명을 비교합니다.
  3. 서버 uptime과 오류 로그에서 연결 사이에 서버가 종료되거나 다시 시작됐는지 확인합니다.
  4. 애플리케이션이 이미 닫힌 연결 객체를 다시 사용했는지 확인합니다.
  5. 큰 쿼리나 BLOB 전송에서만 발생하면 서버·클라이언트의 패킷 제한과 요청 크기를 비교합니다.

다음 읽기 전용 조회로 현재 값을 확인할 수 있습니다.

SHOW GLOBAL STATUS LIKE 'Uptime';SHOW GLOBAL VARIABLES LIKE 'wait_timeout';SHOW GLOBAL VARIABLES LIKE 'max_allowed_packet';

wait_timeout을 늘리는 것만으로 연결 관리 오류, 서버 재시작, 패킷 초과, 네트워크 단절은 해결되지 않습니다. 관찰값과 오류 시각의 로그를 확인한 뒤 애플리케이션의 연결 재생성 조건을 수정합니다.

재시도 전 확인

  • 같은 연결을 다시 사용하지 말고 클라이언트 라이브러리의 연결 유효성 검사와 새 연결 생성 동작을 확인합니다.
  • 쓰기 작업은 서버에서 실행됐는지 확인한 뒤 중복 실행에 안전한 경우에만 제한적으로 재시도합니다.
  • 비밀번호, 연결 문자열, 쿼리 값에 포함된 개인정보는 공유 로그에서 제거합니다.

참고

MySQL은 클라이언트 오류의 SQLSTATE 값을 항상 HY000으로 설명하므로, 이 값만으로는 다른 클라이언트 오류와 구분할 수 없습니다.

출처

참고 자료

MySQL :: MySQL 8.4 Error Reference :: 3 Client Error Message Reference (새 창에서 열림)

MySQL · 공식 자료 · 확인 범위: "MySQL server has gone away"의 오류 번호는 2006이고 심볼은 CR_SERVER_GONE_ERROR입니다., 클라이언트 오류의 SQLSTATE 값은 항상 HY000입니다. · 확인일: 2026-08-29

MySQL :: MySQL 8.4 Reference Manual :: B.3.2.7 MySQL server has gone away (새 창에서 열림)

MySQL · 공식 자료 · 확인 범위: CR_SERVER_GONE_ERROR는 클라이언트가 서버에 쿼리를 보내지 못한 상태를 나타냅니다., 가장 흔한 원인은 서버가 시간 제한 후 연결을 닫은 경우입니다., 서버의 wait_timeout, 서버 종료 또는 재시작, 큰 패킷과 네트워크 문제를 원인 후보로 확인할 수 있습니다. · 확인일: 2026-08-29