MySQL 대용량 데이터 삽입 시 `Error Code: 2013` 해결

오형상·2025년 4월 6일
0

MySQL

목록 보기
3/3
post-thumbnail

📌 문제 상황

워크벤치를 이용해 더미 데이터를 10만 건 삽입하던 중, 아래와 같은 오류가 발생했습니다:

Error Code: 2013. Lost connection to MySQL server during query

처음에는 단순한 네트워크 문제인가 싶었지만, 파일 크기를 보니 SQL 파일 용량이 무려 95MB가 넘어가고 있었습니다.
대용량 INSERT 구문 처리 중 서버와의 연결이 끊긴 것으로 보였습니다.


🧪 첫 번째 시도 (실패) – 워크벤치 쿼리 타임아웃 늘리기

인터넷 검색 중 가장 많이 나오는 해결책은 워크벤치의 쿼리 시간 제한 설정 변경이었습니다.

경로
Edit > Preferences > SQL Editor > MySQL Session

워크벤치 설정

항목설명
DBMS connection keep-alive intervalDBMS에 주기적으로 keep-alive 신호를 보내는 간격 (기본 600초)
DBMS connection read timeout interval쿼리 결과를 기다리는 최대 시간 (기본 30초)
DBMS connection timeout intervalDB 연결 시도 시 최대 대기 시간 (기본 60초)

read timeout을 300초 이상으로 늘려도 오류는 계속 발생했습니다.
즉, 문제는 시간 제한이 아니라 패킷 크기였습니다.


✅ 두 번째 시도 (성공) – max_allowed_packet 설정 변경

SQL 파일이 95MB 정도였기 때문에, 단일 쿼리의 패킷 크기가 MySQL 서버의 max_allowed_packet 제한(기본 16MB) 을 초과하고 있었습니다.

🔧 Docker 환경에서 설정 변경

제가 사용 중이던 MySQL은 Docker 컨테이너 기반이었고, 아래와 같이 docker-compose.yml을 수정했습니다:

mysql1:
  image: mysql:8.0.30
  container_name: event-db
  ports:
    - "3307:3306"
  environment:
    MYSQL_ROOT_PASSWORD: rootpassword
    MYSQL_DATABASE: ficket
  command: --max_allowed_packet=256M
  volumes:
    - mysql1-data:/var/lib/mysql

command: --max_allowed_packet=256M 를 추가해 주었습니다.

🔄 컨테이너 재시작

docker-compose up -d mysql1

🔍 적용 확인

docker exec -it event-db mysql -u root -p -e "SHOW VARIABLES LIKE 'max_allowed_packet';"

정상적으로 설정되었다면 아래와 같이 출력됩니다.

+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| max_allowed_packet | 268435456 |
+--------------------+-----------+

🧨 이후

설정 적용 후 아래 명령어로 컨테이너 내부에 접속해 SQL 파일을 실행했더니, 더 이상 오류 없이 성공적으로 데이터가 삽입되었습니다.

docker exec -it event-db bash
mysql -u [user] -p[password] [database] < [data.sql]

✍️ 마무리

대용량 데이터 삽입 시에는 단순한 워크벤치 설정만으로 해결되지 않는 경우가 많습니다.
특히 max_allowed_packet패킷 크기 제한이 걸려 있을 경우 꼭 확인해야 할 항목입니다.

  • SQL 파일 크기가 50MB 이상이라면 max_allowed_packet 설정 먼저 의심
  • 워크벤치에서 삽입 실패 시, CLI로 처리하면 훨씬 안정적
  • Docker 환경이라면 command: 옵션으로 설정 쉽게 반영 가능

Reference

0개의 댓글