MySQL server has gone away 错误处理

解决方案1:

这个是mysql自身的一个机制:
     mysql连接的空闲时间超过8小时后 MySQL自动断开该连接
解决办法有两个:
     1、修改mysql 配置
               增加 MySQL 的 wait_timeout 属性的值
      2、定时访问 mysql, 维持 mysql连接的 空闲时间
               在应用中, 写个定时任务, 定时去访问 mysql 数据库

以上介绍了“ django数据库重连机制”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2831093.html

问题描述

使用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_exception
OperationalError: (2006, ‘MySQL server has gone away‘)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

原因

连接超时

我出现问题就是这个原因. 
进入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    |
+----------------------------+----------+
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

wait_timeout 是28800秒,即mysql链接在无操作28800秒后被自动关闭

解决方法

立即生效

执行下面的sql命令

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

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

永久生效

该方法修改完之后, 需要重启mysql才能生效. 
编辑mysql配置文件my.cnf,添加或修改为下面这条命令. 
(我的mysql配置文件路径: /etc/mysql/my.cnf )

wait_timeout = 108000
  • 1

其他原因

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

版权声明:文为昔日之积累,常忘食废寝而得,望友传之时注以源。 https://blog.csdn.net/win_turn/article/details/78196789

文章标签: mysqldjangoceleryoperationagone-away

原文地址:https://www.cnblogs.com/leigepython/p/9269685.html

时间: 2024-10-08 09:41:51

MySQL server has gone away 错误处理的相关文章

Navicat中MySQL server has gone away错误怎么办【转载】

转载链接:http://www.111cn.net/database/mysql/64073.htm mysql数据库出现MySQL server has gone away错误一般是sql语句太大导致了,下面们在使用Navicat中操作数据库时提示MySQL server has gone away问题解决办法. 备份数据时,生成的sql文件比较大,当然,这个sql是包含了比较多的冗余数据.用Navicat直接导入的话,报错MySQL server has gone away.如下图所示: 解

mysql_ping()以及MYSQL_OPT_RECONNECT MySQL server has gone away”错误

来源:http://www.felix021.com/blog/read.php?2102 昨天@Zind同学找到我之前的一篇blog(已经修改),里面提到了mysql_ping和MYSQL_OPT_RECONNECT的一些事情. 之所以写那篇blog,是因为去年写的一些代码遇到了"2006:MySQL server has gone away"错误.这个问题是因为wait_timeout这个参数的默认值是28800,也就是说,如果一个连接连续8个小时没有任何请求,那么Server端就

mysql导入大量数据时报MySQL server has gone away错误的解决办法

在我们使用mysql导入大文件sql时可能会报MySQL server has gone away错误,该问题是max_allowed_packet配置的默认值设置太小,只需要相应调大该项的值之后再次导入便能成功.该项的作用是限制mysql服务端接收到的包的大小,因此如果导入的文件过大则可能会超过该项设置的值从而导致导入不成功!下面我们来看一下如何查看以及设置该项的值. 查看 max_allowed_packet 的值 mysql> show global variables like 'max

python测试开发django-58.MySQL server has gone away错误的解决办法

前言 使用django执行sql相关操作的时候,出现一个"MySQL server has gone away"错误,后来查了下是sql执行过程中,导入的文件较大时候,会出现这个异常. 检查了下sql语句,确实有插入图片,图片较大导致出现MySQL server has gone away. 该问题是max_allowed_packet配置的默认值设置太小,只需要相应调大该项的值之后再次导入便能成功. 该项的作用是限制mysql服务端接收到的包的大小,因此如果导入的文件过大则可能会超过

MySQL server has gone away错误的解决办法

在我们使用mysql导入大文件sql时可能会报MySQL server has gone away错误,该问题是max_allowed_packet配置的默认值设置太小,只需要相应调大该项的值之后再次导入便能成功.该项的作用是限制mysql服务端接收到的包的大小,因此如果导入的文件过大则可能会超过该项设置的值从而导致导入不成功!下面我们来看一下如何查看以及设置该项的值. 查看 max_allowed_packet 的值 show global variables like 'max_allowe

Navicat for MySQL打开链接时出错错误为:2005 - Unknown MySQL server host 'localhost'(0)?

问题:Navicat for MySQL打开链接时出错错误为:2005 - Unknown MySQL server host 'localhost'(0)? 在使用navicat 连接mysql数据库的时候会出现:mysql error 2005 - Unknown MySQL server host 'localhost'(0)错误:当检查连接信息,连接属性信息,用户名和密码都是正确的,IP地址为:localhost,在有网络的情况下都能正常打开数据库,但是一断网就出错了. 解决方案如下:在

pcntl_fork 导致 MySQL server has gone away 解决方案

pcntl_fork 前连数据库,就会报 MySQL server has gone away 错误.原因是子进程会继承主进程的数据库连接,当mysql返回数据时,这些子进程都可以通过这个连接读到数据,造成数据错乱. 该操作数据库的地方还是要操作数据库: 要解决这个问题,要在 $pid = pcntl_fork();  前清理掉之前的MySQL连接: 官方文档的解释以及解决方案 http://php.net/manual/en/function.pcntl-fork.php#70721 于是我如

ERROR 2003 (HY000): Can't connect to MySQL server on 'ip'(111)

问题描述:  从一台linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can't connect to MySQL server on 'ip'(111)错误.   [[email protected] ~]$ mysql -hxxx.xxx.xxx.85 -uroot -p Enter password:  123456   ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.

MySQL server has gone away

General error: 2006 MySQL server has gone away 发布: 来源: 添加日期:2014-10-02 23:00:56 浏览:146 评论:0 如果我们单看mysql提示MySQL server has gone away就是由于种种原因导致mysql当机了,导致MySQL server has gone away的原因有很多种,下面我来总结一下. 我自己人的经历:先简单介绍一下这个新手卡录入后台,这个后台是提供给产品人员使用,可以向某个游戏的某个特定分区