標籤: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;
該命令是將wait_timeout設定為30小時.
用這種方法,修改完立即生效. 如果重啟mysql, 又恢複原來的28800秒.
永久生效
該方法修改完之後, 需要重啟mysql才會生效.
編輯mysql設定檔my.cnf,添加或修改為下面這條命令.
(我的mysql設定檔路徑: /etc/mysql/my.cnf )
wait_timeout = 108000
其他原因
還有一些其他原因, 簡單描述一下
1: mysql服務關閉
2: 資料包 過大
解決方案: 修改 max_allowed_packet
的值, 方法同上.
著作權聲明:文為昔日之積累,常忘食廢寢而得,望友傳之時注以源。78196789文章標籤: mysqldjangoceleryoperationagone-away
MySQL server has gone away 錯誤處理