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 할 때 오류가 발생하지 않을 것이다.
참고
'Dev > MySQL' 카테고리의 다른 글
[MySQL] AWS EC2에 특정 버전 MySQL (8.0.32) 설치하기 (0) | 2023.04.19 |
---|---|
[MySQL] Waiting for table metadata lock (0) | 2022.10.17 |
[MySQL] ERROR 1018 (HY000): Can't read dir of '.' (errno: 13) (1) | 2022.09.22 |
[Database] Lock, Block, DeadLock (0) | 2022.09.15 |
[MySQL] Dynamic SQL을 사용하여 프로시저 생성 (0) | 2022.09.04 |
댓글