• 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
  • 相关阅读:
    用JavaScript+CSS实现Mootools竖排动画菜单
    如何对html:select下拉列表里的数据进行排序
    Work with Unicode, CCSID & DBCS
    学习笔记之搜索引擎—原理、技术与系统
    C#中如何创建文件夹
    学习笔记之Effective C++ 2nd Edition
    Global variables vs. Host variables vs. Parameter markers
    【ZZ】cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
    freopen C/C++文件输入输出利器
    [ZZ]用Eclipse开发C/C++程序的图形化配置
  • 原文地址:https://www.cnblogs.com/leigepython/p/9269685.html
Copyright © 2020-2023  润新知