mysql 2006 python_记录一次Python连接mysql踩坑过程:(pymysql.err.OperationalError) (2006,

本文记录了一次在使用Python连接MySQL时遇到的2006错误,该错误因数据库操作间隔超过8小时导致连接断开。解决方案包括优化代码以增加重连机制或修改MySQL的interactive_timeout配置。通过这次经验,作者提醒读者深入理解底层原理以避免类似问题。
摘要由CSDN通过智能技术生成

踩坑过程

服务器部署了一个flask-apscheduler的定时任务项目,每天的几个时间点会自动推送消息或者跑任务。但经过一段时间后,发现有几个任务莫名其妙的没有运行,其他任务又可以正常运行。排查下来也不是代码问题,因为其他任务可以跑,就一两个任务不行,反复排查问题无果。后面在网上找原因,提示说可以在flask-apscheduler项目中增加log来排查,我在项目入口监听了log,果不其然,发现了一些问题

LOG记录2021-01-23 06:00:00 base.py[line:952] WARNING Error getting due jobs from job store 'default': (pymysql.err.OperationalError) (2006, "MySQL server has gone away (BrokenPipeError(32, 'Broken pipe'))"). [SQL: SELECT apscheduler_jobs.id, apscheduler_jobs.job_state FROM apscheduler_jobs WHERE apscheduler_jobs.next_run_time <= %(next_run_time_1)s ORDER BY apscheduler_jobs.next_run_time] [parameters: {'next_run_time_1': 1611352800.002729}] (Background on this error at: http://sqlalche.me/e/13/e3q8) 2021-01-23 06:00:10 base.py[line:120] WARNING Run time of job "job_cordcloud_sign_in (trigger: cron[month='*', day='*', day_of_week='*', hour='6', minute='0', second='0'], next run at: 2021-01-23 06:00:00 CST)" was missed by 0:00:10.012178以上是截取的部分log记录

问题分析

从log中可以看到,当执行job名为job_cordcloud_sign_in的任务时,报了一个数据库错误。问题就出在这,我这个任务是需要去查库,然后再走job逻辑的,查库的时候报错了,导致后面的代码没有执行。根据这个错误,网上查解决方案就简单了

最终原因

主要是我这个程序里的涉及到数据库操作的任务之间运行间隔时间超过了8小时,而数据库默认8小时不从数据库取数据则断开连接,所以会抛出这个错误

解决方案方案一:

网上说可以优化代码,增加重连场景,但我没有采用这种办法,大家可以去尝试下方案二:

我采用的是直接修改数据库的interactive_timeout配置,默认是28800秒,即8小时show global variables like '%timeout';

修改方法

修改my.cnf的配置,如下图

27058916ce05ee0584c96379e398ff0b.png

修改后的效果

6e144e745012a7e3b36774a857929220.png

总结

还是自己对底层的东西了解的不够透彻,这种问题应该是比较粗浅的,但我因为没有碰到过此类问题,所以走了很多弯路,在这里也记录下,以免以后自己再掉到同样的坑里。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值