MariaDB 에서 작업을 진행하다가 다음과 같은 오류를 맞이하였습니다.

오류의 내용

오류 메세지 내용은 다음과 같습니다.

  File "/django/mysite/_instance.py", line 35, in <lambda>
    filter(lambda x : model.objects.filter(code=x).count() == 0,
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/erdos/Source/.venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 179, in execute
    res = self._query(mogrified_query)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/erdos/Source/.venv/lib/python3.11/site-packages/MySQLdb/cursors.py", line 330, in _query
    db.query(q)
  File "/home/erdos/Source/.venv/lib/python3.11/site-packages/MySQLdb/connections.py", line 261, in query
    _mysql.connection.query(self, query)

django.db.utils.OperationalError: (2013, 'Lost connection to MySQL server during query')

해당 오류는 서버와 연결이 끊어진 것 으로 다음과 같은 원인에 의해 발생합니다.

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

해결방법

문제가 발생한 쿼리함수를 보다 원할하게 작동할 수 있도록 구조와 함수를 변경하는 방법이 하나 있습니다.

  File "/home/erdos/Source/django/app_stock/tasks/_data/_instance.py", line 35, in <lambda>
    filter(lambda x : model.objects.filter(code=x).count() == 0,
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

MariaDB Setting

또는 SQLnet_read_timeoutnet_write_timeout 시간값을 기본값 보다 큰 값으로 재설정 하는 방법이 있습니다. MySQL - Error 2013/Error 2006 을 참고하여 DB Setting 값을 변경하는 방법은 다음과 같습니다.

MariaDB> show variables like 'net_read_timeout%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| net_read_timeout | 30    |
+------------------+-------+ 

MariaDB> show variables like 'net_write_timeout%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| net_write_timeout | 60    |
+-------------------+-------+

MariaDB> set global net_read_timeout = 10800;
MariaDB> set global net_write_timeout = 10800;

참고사이트