zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【网络】【操作系统】select、poll、epoll
    【JMM】java内存模型及volatile关键字底层
    【数据库】连接查询(from 内连接 外连接)
    【数据库】SQL牛客练习关键点复习
    【SpringMVC】文件/图片 的下载与上传
    【SpringMVC】拦截器实现与网页跳转步骤
    什么是hashMap,初始长度,高并发死锁,java8 hashMap做的性能提升
    自己写一个HashMap
    String去除重复字符两个方法
    Solr与Elasticsearch比较
  • 原文地址:https://www.cnblogs.com/leigepython/p/9269685.html
Copyright © 2011-2022 走看看