[MySQL - Error 2013/Error 2006]

Error 2013

■ 에러 발생 
데이터 이관 중 export시 발생
[root@localhost data]# mysqldump -u kim-p --routines --triggers  --single-transaction kim --events > /dump/dump.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `***` at row: 167770

 

 

■ 발생 이유
2013은 서버 연결이 끊어 졌음을 의미
 
1. 누군가 세션을 kill하여 발생할 수 있습니다.
2. 네트워크 문제로 인해 연결이 끊어져서 발생 할 수 있습니다.
3. 서버 내 충돌이 일어나 끊길 수 있습니다.
4. 연결이 유휴 상태 wait_timeout이며 종료될 수 있습니다.
3. 클라이언트가 데이터를 충분히 빨리 가져 오지 못하고 종료되어 net_wait_timeout될 수 있습니다.

 

 

■ 조치 방법
아래 네트워크 timeout을 재설정 한뒤 export 재시도
MySQL [(none)]> show variables like 'net_read_timeout%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| net_read_timeout | 30    |
+------------------+-------+
1 row in set (0.01 sec)

MySQL [(none)]> show variables like 'net_write_timeout%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| net_write_timeout | 60    |
+-------------------+-------+
1 row in set (0.00 sec)



MySQL [(none)]> set global net_read_timeout = 10800;
MySQL [(none)]> set global net_write_timeout = 10800;

 


Error 2006

■ 에러 발생
데이터 이관 중 import를 하다가 중간에 아래와 같은 에러가 발생하고 중단되었다.
[root@localhost data]# mysql -uroot -p kim < dump.sql
ERROR 2006 (HY000) at line 19232: MySQL server has gone away

 

## 에러 로그

2022-10-17T23:58:04.143584Z 0 [Note] InnoDB: Buffer pool(s) load completed at 221018  8:58:04
2022-10-17T23:58:04.160959Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2022-10-17T23:58:04.162289Z 0 [Note] IPv6 is available.
2022-10-17T23:58:04.162317Z 0 [Note]   - '::' resolves to '::';
2022-10-17T23:58:04.162366Z 0 [Note] Server socket created on IP: '::'.
2022-10-17T23:58:04.175732Z 0 [Note] Event Scheduler: Loaded 0 events
2022-10-17T23:58:04.175840Z 0 [Note] /mysql/bin/mysqld: ready for connections.
Version: '5.7.34'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)
2022-10-18T00:13:56.590061Z 4 [Note] Aborted connection 4 to db: 'kim' user: 'root' host: 'localhost' (Got a packet bigger than 'max_allowed_packet' bytes)

 

 

■ 발생 이유
1. 서버 연결이 끊어졌거나 실행중에 서버가 죽었을 때 등 서버와의 연결에 문제가 생겼을 때 발생합니다.
2. 부적절하거나 너무 큰 쿼리를 보냈을 때. 이 경우 데이터베이스는 뭔가가 잘못됐다고 판단하고 연결을 끊습니다.
3. 이전 연결 세션에 영향을 받은 경우 끊길 수 있습니다.
 
 
■ 조치 방법
max_allowed_packet 파라미터를 재설정하여 쿼리 제한을 증가시켜줍니다.
설정된 용량보다 더 큰 패킷을 받으면 위의 에러가 발생합니다.
패킷이란 mysql서버에 보내는 sql문의 단위입니다. 
## 기존 설정 (기본값인 4MB)
mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.00 sec)


## MySQL 5.7 서버의 최대 패킷 용량인 1GB로 설정
mysql> set global max_allowed_packet=1073741824;
Query OK, 0 rows affected (0.00 sec)


## Import 재시작
[root@localhost data]# mysql -uroot -p  kim < dump.sql