OperationalError: (2006, 'MySQL server has gone away')

来源:互联网 发布:2017淘宝开店营业执照 编辑:程序博客网 时间:2024/04/30 09:21

问题描述

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

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

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_exceptionOperationalError: (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秒后被自动关闭

解决方法

立即生效

执行下面的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 的值, 方法同上.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝拉泡沫便便怎么办 孩子拉肚子怎么办呢有好办法吗 2岁宝宝大便带血怎么办 十个月宝宝肛裂怎么办 大便时拉出血怎么办啊 2岁宝宝大便干燥怎么办 5岁儿童大便干燥怎么办 九个月宝宝平血怎么办 6个月宝宝肛裂怎么办 3岁儿童大便干燥怎么办 外痔疮出血了该怎么办 外痔疮流血了怎么办呢 外痔疮破了出血怎么办 拉稀拉的肛门疼怎么办 大人屁股沟裂了怎么办 肛门痛大便有血怎么办 肛裂出血几天了怎么办 肛裂拉屎出血该怎么办 孕期肛裂出血该怎么办 老人大便拉不出来怎么办 拉屎拉的屁眼疼怎么办 拉屎堵在肛门口怎么办 上火拉大便有血怎么办 7岁儿童大便带血怎么办 阴炎用药后出血怎么办 孕晚期大便拉不出来怎么办 想拉屎拉不出来怎么办 4岁幼儿大便干燥怎么办 2岁幼儿大便干燥怎么办 1岁幼儿大便干燥怎么办 5岁幼儿大便干燥怎么办 4岁儿童大便干燥怎么办 狗吃别的狗的屎怎么办 狗狗黄疸怎么办最有效 拉屎出血但不疼怎么办 没拉出时就出血怎么办 拉不出大便怎么办肛门像被堵住 尿里粘液丝高怎么办 右肋骨里面疼是怎么办 腰受凉直不起来怎么办 干活累了腰疼怎么办