mysql连接数据库丢失链接_mysql数据库连接丢失问题(Django示例)

本文探讨了在Django中遇到MySQL数据库连接丢失的问题,详细介绍了如何复现这个问题,包括出现'Lost connection to MySQL server during query'错误的原因。通过分析Django的CONN_MAX_AGE设置和关闭旧连接的方法,提出了在长时间无数据库交互的操作前后调用django.db.close_old_connections()来避免错误。此外,建议优化处理慢的查询或采用异步处理来根本解决问题。
摘要由CSDN通过智能技术生成

问题

在Django中使用mysql偶尔会出现数据库连接丢失的情况,错误通常有如下两种

1. OperationalError: (2006, 'MySQL server has gone away')

1. OperationalError: (2013, 'Lost connection to MySQL server during query')

查询mysql全局变量SHOW GLOBAL VARIABLES;可以看到wait_timeout,此变量表示连接空闲时间。如果客户端使用一个连接查询多次数据库,如果连续查询则没有问题,如果查询几次后停顿超过wait_timeout后再次查询就会出现数据库连接丢失。

复现

下面用Django复现下次问题:

将mysql的wait_timeout设置为10秒,然后进入django shell模拟查询(以下错误信息只保留了部分)

In[1]:import time

In[2]:from django.contrib.auth.models import User

In[3]:list(User.objects.filter(id=1))

Out[3]:[]

In[4]:time.sleep(15) # 模拟比较慢的代码(其中没有查询数据库的代码),或者空闲什么都不操作一段时间,此时间要比`wait_timeout`大一些

list(User.objects.filter(id=1))

Traceback (most recent call last):

File "", line 1, in

list(User

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值