MariaDB 에서 작업을 진행하다가 다음과 같은 오류를 맞이하였습니다.
File /lib/python3.11/site-packages/MySQLdb/connections.py:261, in Connection.query(self, query)
259 if isinstance(query, bytearray):
260 query = bytes(query)
--> 261 _mysql.connection.query(self, query)
OperationalError: (2006, 'Server has gone away')
MySQL server has gone away 에러가 발생하는 원인은 아래와 같습니다.
- 커넥션이 끊어진 이후에 쿼리를 전송했을 때
- max_allowed_packet 을 초과하는 크기의 쿼리를 전송했을 때
- wait_timeout 을 초과하여 커넥션이 끊어진 경우
- 잘못된 쿼리를 지속적으로 전송하여 서버가 차단한 경우
max_allowed_packet
값을 수정하기 전에 설정된 기본값을 확인해 보겠습니다. 기본값은 wait_timeout 8시간, max_allowed_packet 는 16M 입니다.
SHOW VARIABLES LIKE "wait_timeout";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
SHOW VARIABLES LIKE "max_allowed_packet";
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
기본값을 확대하는 것도 방법이지만 서버와 통신하는 코드에서 최적화 작업을 우선 확인한 뒤 그래도 해결이 안 될 때 아래의 설정값을 확대 합니다.
$ cat /etc/mysql/conf.d/mysql.cnf
[mysql]
wait_timeout = 28800
max_allowed_packet = 16777216