MySQL server has gone away有幾種狀況: mysql
一、應用程序(好比PHP)長時間的執行批量的MYSQL語句,最多見的就是採集或者新舊數據轉化。
解決方案,在my.cnf文件中添加或者修改如下兩個變量: sql
wait_timeout=2880000
interactive_timeout = 2880000
關於兩個變量的具體說明能夠google或者看官方手冊。
若是不能修改my.cnf,則能夠在鏈接數據庫的時候設置CLIENT_INTERACTIVE,好比:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...) 數據庫
二、執行一個SQL,但SQL語句過大或者語句中含有BLOB或者longblob字段。
好比,圖片數據的處理
解決方案
在my.cnf文件中添加或者修改如下變量:
max_allowed_packet = 10M(也能夠設置本身須要的大小)
max_allowed_packet 參數的做用是,用來控制其通訊緩衝區的最大長度。
可能有不少人遇到過標題中的這個錯誤。以前咱們也常常遇到,一直沒有認真找是什麼緣由。今天花了些時間google了下。原來,這個問題並非MySQL的bug, 它本質是一個配置問題, 解決起來也不麻煩。 服務器
在Mysql客戶端中, 經過 SHOW VARIABLES; 語句能夠查看Mysql系統變量。這些變量中名爲 wait_timeout 的變量的值過於小,就是形成這個錯誤的根源。這個變量的含義是:若是在該鏈接在 wait_timeout 時間內沒有進行任何查詢(idle時間超時), 服務器將自動關閉這個鏈接。 google
若是你的腳本在執行了一個查詢以後,接着是另一個很耗時的沒有任何數據庫查詢的操做(超過了wait_timeout設置的值,單位是秒), 以後你再進行數據庫操做,就必定會遇到標題所示的錯誤。 spa
個人解決方案是,在必要的地方,數據庫鏈接以後,馬上執行一句」SET SESSION wait_timeout=65535″。 server