Mysql数据库的压力

  • rationalError: (2006, 'MySQL server has gone away')

问题描述

使用django+celery时, 运行长时间的任务, 一开始操做一次数据库, 20个小时后再次操做数据库.php

过了20多个小时, 再次操做数据库时报错.html

raised unexpected: OperationalError(2006, 'MySQL server has gone away') Traceback (most recent call last): File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 85, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 374, in get num = len(clone) File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 232, in __len__ self._fetch_all() File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 1118, in _fetch_all self._result_cache = list(self._iterable_class(self)) File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 53, in __iter__ results = compiler.execute_sql(chunked_fetch=self.chunked_fetch) File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/compiler.py", line 894, in execute_sql raise original_exception OperationalError: (2006, 'MySQL server has gone away')

缘由

链接超时

我出现问题就是这个缘由. 
进入mysql,执行下面的命令:前端

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秒后被自动关闭python

解决方法

当即生效

执行下面的sql命令mysql

mysql> set global wait_timeout=60*60*30;
  • 1

该命令是将wait_timeout设置为30小时. 
用这种方法,修改完当即生效. 若是重启mysql, 又恢复原来的28800秒.linux

永久生效

该方法修改完以后, 须要重启mysql才能生效. 
编辑mysql配置文件my.cnf,添加或修改成下面这条命令. 
(个人mysql配置文件路径: /etc/mysql/my.cnf )web

wait_timeout = 108000
  • 1

其余缘由

还有一些其余缘由, 简单描述一下 
1: mysql服务关闭 
2: 数据包 过大 
解决方法: 修改 max_allowed_packet 的值, 方法同上.sql

版权声明:文为昔日之积累,常忘食废寝而得,望友传之时注以源。 https://blog.csdn.net/win_turn/article/details/78196789
我的分类: djangomysql
宿迁90后小伙在家无聊玩微信,存款惊呆父母!鑫迪科技 · 顶新
想对做者说点什么?  我来讲一句
 

从前端到后台,开发一个完整功能的小程序

 

微信开发 | wanghui_777
新出的微赚钱方式,网友:白玩这么多年手机了万达广场投资 · 顶新

我的资料

原创
98
粉丝
80
喜欢
165
评论
56
等级:
 
访问:
 
61万+
积分:
 
4493
排名:
 
8794
勋章:

最新评论

 
相关文章
相关标签/搜索