본문 바로가기
Dev/MySQL

[MySQL] ERROR 2006 (HY000) : MySQL server has gone away

by 흰바다제비 2022. 10. 7.
728x90

Problem

백업 받아둔 파일을 import 하는데 오류가 발생했다.

ERROR 2006 (HY000) at line 17377: MySQL server has gone away

 

확인해보니 서버가 처리할 수 있는 최대 크기는 32mb 였는데, 일부 쿼리의 크기가 32mb가 넘어갔던 것..

 

한번 해당 오류가 발생하면, 연결이 아예 끊겨 import 하던 세션은 사용할 수가 없다.

문제되는 쿼리를 제외하고 import를 다시 시작하거나, 한번에 더 큰 크기의 쿼리를 처리할 수 있도록 설정을 변경해준다. 이어서 설정을 변경하는 방법을 설명한다.


Solution

먼저, 서버의 기존 설정을 확인한다.

SHOW VARIABLES LIKE 'max_allowed_packet'
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 33554432 |
+--------------------+----------+

 

conf 파일을 수정한다.

vi /etc/my.cnf

[mysqld]
max_allowed_packet = 32M

 

mysqld 재시작을 해준다.

systemctl stop mysqld
systemctl start mysqld

 

적용되었는지 확인해본다.

SHOW VARIABLES LIKE 'max_allowed_packet'
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 67108864 |
+--------------------+----------+

 


 

SET GLOBAL max_allowed_packet = 64M, 혹은 import 할 때 --max_allowed_packet=67108864 옵션을 주라는 글도 봤는데, 내 경우엔 둘 다 적용되지 않았다. 실행은 되는데 확인해보면 값이 변경되지 않음.

 

적용되지는 않았지만 사용하는 법은 다음과 같다.

SQL> SET GLOBAL max_allowed_packet = 64M

$ mysql -uroot -p testdb --max_allowed_packet=67108864 < backup.dmp

 


 

추가로, 오류가 발생하게 된 원인을 파악해보았다.

[mysqld]
max_allowed_packet = 32M

...

[mysqldump]
quick
max_allowed_packet = 64M

 

dump 받은 서버의 설정은 max_allowed_packet = 32M 이지만, mysqldump 설정이 max_allowed_packet = 64M 이기 때문에 32M가 넘는 쿼리가 발생한 것 같다.

 

mysqldump 아래의 max_allowed_packet 설정을 max_allowed_packet = 32M 으로 변경하면 모든 쿼리가 32M 이하로 추출되어 추후 import 할 때 오류가 발생하지 않을 것이다. 

 

 

 


참고

 

MySQL ERROR 2006 (HY000): MySQL server has gone away - 제타위키

✔️ MySQL 5.5에서 테스트하였습니다. ERROR 2006 (HY000): MySQL server has gone away 1 문제상황[ | ] MySQL 덤프 파일을 임포트하는 중 오류 발생 [root@newhost ~]# mysql mydb < db.sql -uroot -pP@ssw0rd ERROR 2006 (HY000) at line

zetawiki.com

 

728x90

댓글