先说错误的表现形式,在Rabbitmq中写了一个操作数据库的方法,启动后使用完全没有问题,但是在第二天发现数据库无法插入数据了,查找日志发现:
(2006, 'MySQL server has gone away')
再次启动项目,错误就消失了,所以猜测是mysql链接超时导致的,因为默认的链接时间是8小时,所以尝试在项目启动时,增加一个判断,若链接超时,把链接关闭,重新进行链接。
from intelligentAduit.models import OneUploadResultTable, BatchUploadResultTable
from django.db import connection
from django.db.utils import OperationalError
logger = Logger("intelligentAduit")
# 监听算法端返回的消息,将结果存入数据库并更改数据库中文件状态
def parse_result_func(ch, method, properties, body):
# 这里就是尝试重新链接数据库
try:
OneUploadResultTable.objects.first()
BatchUploadResultTable.objects.first()
except OperationalError:
print("mysql,链接超时”)
connection.close()
然后,去数据库,将超时时间设置的短一些,待链接超时后,再去看问题是否仍然存在。
一般的超时时间为8小时,show global variables like '%timeout’查看
mysql> show global variables like '%timeout';
+-----------------------------------