如何解决MySQL server has gone away报错问题
https://jingyan.baidu.com/article/37bce2bec7081b5003f3a222.html
这个报错出现的原因:操作MySQL数据库的时候,连接超时或者连接的session已经被MySQL抛弃,因为使用了定时任务apscheduler,方式是持久层的框架sqlalchemy,所以,通过3方面来解决。
第一、MySQL,MySQL默认的wait_timeout时间28800秒,即8小时,超过8小时,MySQL就会放弃连接。可以看一下自己的MySQL设置的时间是多少,运行show variables like '%timeout%';这个SQL即可查看到,时间根据自己业务而定,我在这里就保持8小时不变。
第二、需要修改apscheduler持久层连接时间,设置时间小于8小时,即,还没有到MySQL放弃session的时间,apscheduler就主动回收了连接,这样在使用的时候,可以解决由于超时,MySQL主动抛弃session导致的MySQL server has gone away错误。如下图所示,设置连接时间为7小时。并且pool_pre_ping为True,即每次从连接池中取连接的时候,都会验证一下与数据库是否连接正常,如果没有连接,那么该连接会被回收。
第三、在Django中操作数据库时,有两种情况,一种是使用Django的ORM方式操作数据库,即Model.objects.filter()这种方式,我们在报错之前,即操作数据库之前,先关闭连接,再重连数据库,即可解决这种方式的报错情况,引入
from django.db import close_old_connections
在操作数据库之前,加上close_old_connections(),如下图所示。
第四、另外一种方式是自定义执行SQL,原理一样,只需要在操作数据库前,关闭连接即可,引入
from django.db import connection
在操作数据库前,加上connection.close(),如下图所示。
至此,通过上面的修改:
1、MySQL超时时间设置;
2、定时任务持久层设置;
3、Django的ORM形式与自定义SQL两种方式操作前关闭连接;
就彻底解决了MySQL server has gone away这个报错。
注意事项
-
修改点要修改全,有遗漏的话,还是会报错的
本文作者:香菜哥哥
本文链接:https://www.cnblogs.com/yizhipanghu/p/16441938.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY