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')
해당 오류는 서버와 연결이 끊어진 것 으로 다음과 같은 원인에 의해 발생합니다.
- 누군가 세션을 kill하여 발생할 수 있습니다.
- 네트워크 문제로 인해 연결이 끊어져서 발생 할 수 있습니다.
- 서버 내 충돌이 일어나 끊길 수 있습니다.
- 연결이 유휴 상태 wait_timeout이며 종료될 수 있습니다.
- 클라이언트가 데이터를 충분히 빨리 가져 오지 못하고 종료되어 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
또는 SQL
의 net_read_timeout
과 net_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;