[MySQL] Packet for query is too large 에러 발생시

MySQL을 사용하여 개발 중 4MB가 넘는 파일을 업로드 시 다음과 같은 패킷 에러가 발생하였다.

1
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (9,523,277 > 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable

기본적으로 할당된 패킷 사이즈 값이 너무 작기 때문에 에러가 발생했기 때문에 수정이 필요하다. MySQL 설정에서 max_allowed_packet 값을 변경하여 해결하였다.

max_allowed_packet은 서버로 질의하거나 받게 되는 패킷의 최대 길이를 나타내는 시스템 변수

다음은 해결방법에 대해 알아보겠다.

1) MySQL 커맨드 라인에서 변경

먼저 MySQL 에 접속한다.

1
$ mysql -u root -p ****
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> show variables;

## 1024 * 1024 * 32 -> 32MB
mysql> SET GLOBAL max_allowed_packet = 33554432;
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> show variables where Variable_name = 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 33554432 |
+--------------------+----------+
1 row in set (0.01 sec)

2) 설정파일 변경

/etc/my.cnf 설정파일 내의 값을 변경한다.

1
$ vi /etc/my.cnf
1
2
# 없을 시 추가한다.
max_allowed_packet=32M

3) MySQL 재시작

다음 명령어를 사용여 MySQL를 재시작한다.

1
2
3
4
5
6
7
8
# 우분투
$ service mysql restart

# CentOS6
$ service mysqld restart

# CentOS7
$ systemctl restart mysqld
Share