MySQL server has gone away 錯誤處理

來源:互聯網
上載者:User

標籤:live   const   otto   關閉   line   data-   iterable   href   網址   

解決方案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_exceptionOperationalError: (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 的值, 方法同上.

著作權聲明:文為昔日之積累,常忘食廢寢而得,望友傳之時注以源。78196789文章標籤: mysqldjangoceleryoperationagone-away

 

MySQL server has gone away 錯誤處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.