使用django进行后端处理,Mysql作为数据存储
今天在排查业务订单的时候发现了一个问题,当业务判断正确但是并未及时更新到前端,所以开始从各方面入手对订单进行排查,最后发现是因为当业务进行到最后一步时存储发生了错误,此处为日志记录bug截图: 问题原因:由于mysql自身有timeout参数,超过28800秒无查询连接则进入类似休眠状态,需要查询请求来进行唤醒;
mysql> show global variables like '%timeout'; +----------------------------+----------+ | Variable_name | Value | +----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | slave_net_timeout | 3600 | | wait_timeout | 28800 | +----------------------------+----------+wait_timeout 是28800秒,即mysql链接在无操作28800秒后被自动关闭.
执行下面的sql命令
mysql> set global wait_timeout=60*60*30; 该命令是将wait_timeout设置为30小时. 用这种方法,修改完立即生效. 如果重启mysql, 又恢复原来的28800秒.该方法修改完之后, 需要重启mysql才能生效. 编辑mysql配置文件my.cnf,添加或修改为下面这条命令. (我的mysql配置文件路径: /etc/mysql/my.cnf )
wait_timeout = 108000可以自己部署一个自动脚本,每隔固定时间就对数据库进行一个简单的查询,是数据库一直保持工作状态即可;
还有一些其他原因, 简单描述一下 1: mysql服务关闭 2: 数据包 过大 解决方法: 修改 max_allowed_packet 的值, 方法同上.