The reason of such behavior is persistent connect to database, which was introduced in Django 1.6.
To prevent connection timeout error you should set CONN_MAX_AGE in settings.py to value which is less than wait_timeout in MySQL config (my.cnf). In that case Django detects that connection need to be reopen earlier than MySQL throws it. Default value for MySQL 5.7 is 28800 seconds.
settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'CONN_MAX_AGE': 3600,
<other params here>
}
}
Documentation: https://docs.djangoproject.com/en/1.7/ref/settings/#conn-max-age
my.cnf:
wait_timeout = 28800
Documentation: https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_wait_timeout