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 

참고사이트