mysql gone away的幾種原因

2021-09-11 15:39:20 字數 1273 閱讀 6260

報出錯誤, sqlstate[hy000]: general error: 2006 mysql server has gone away

1:客戶端8小時無活動,致使服務端主動斷開連線,當客戶端用舊有連線去請求資料庫時回導致這個錯誤

2:客戶端請求連線超時,預設連線超時時間是 30s ,也就是說客戶端發起連線請求後 30s內沒有連線上就會報出這個錯誤

3:資料庫連線數滿了,當資料庫連線數滿了的時候客戶端是無論如何都連不上的所以會報出這個錯誤

4:多個連線傳送的資料都比較大資料總和超過了資料庫設定的 max_allowed_packet (預設是4m),此時連線數雖然沒有滿但是已經沒有空間分配給新的連線了 所以也會導致報出 gone away 錯誤

max_allowed_packet :預設是4m ,mysql根據max_allowed_packet的配置會限制server接受的資料報大小。有時候大的插入和更新會被max_allowed_packet 引數限制掉,導致失敗

解決方式:八小時無活動那種,設定重連機制,連線超時那種設定過幾分鐘再去訪問,連線數滿了這種乙個是增加連線數乙個是增加快取使部分查詢壓力去快取,傳送資料比較大這種就要看看怎麼分解查詢了

還有乙個類似的錯誤 (2013 lost connection to mysql server during query)

1、查詢中大量資料被傳送,由於資料傳輸時間不夠導致,可以增加net_read_timeout的值。net_read_timeout : mysql服務端從客戶端讀取(接收)資料時,服務端等待客戶端響應的超時時間,當服務端正在從客戶端讀取資料時,net_read_timeout控制何時超時

2、初次連線時,連線時間設定太少,可以增加connect_timeout的值改善。

connect_timeout:在獲取連線階段(authenticate)起作用, 獲取mysql連線是多次握手的結果,除了使用者名稱和密碼的匹配校驗外,還有ip->host->dns->ip驗證,任何一步都可能因為網路問題導致執行緒阻塞。為 了防止執行緒浪費在不必要的校驗等待上,超過connect_timeout的連線請求將會被拒絕。

3、有些少見的情況可以show global status like 『aborted_connets』,這個全域性變數在每一次伺服器終止時會增加1,檢視"reading authorization packet"獲取錯誤資訊。

4、blob值太大的問題,調整配置檔案max_allowed_packet。

mysql根據配置檔案會限制server接受的資料報大小。有時候大的插入和更新會被max_allowed_packet 引數限制掉,導致失敗。

生活中的數學 買幾送幾

與打折問題常常同時出現的還有 買幾送幾 的問題,每每遇到 買幾送幾 的問題,總會有十幾個學生出錯。例如 開學初,學校打算買630枝鋼筆發給學生,這種鋼筆的統一價是每枝6元。現在有兩家文具店對這種鋼筆搞 活動,紅葉文具店打八五折,文峰文具店 買五送一 請你做一回 小參謀 算一算到哪家文具店購買比較合算...

伺服器幾核幾G幾M的意思 選擇方法0

平時經常看到的雲伺服器 1核1g 1m配置,就是說這台雲伺服器 當然是虛擬出來的 小雞 的配置是單核 cpu,1g記憶體,1m頻寬。同理 2核 4g 5m配置的意思是雙核 cpu,4g記憶體,5m頻寬。以此類推還有 1核2g 2核8g,4核8g 4核16g等等,向上可以達到幾十核幾百g記憶體的一台雲...

IOS MBProgressHUD常見的幾種用法

用法一 最簡單的用法,不需要其他的操作 1 在資料載入之前新增 mbprogresshud showhudaddedto self view animated yes 開始載入資料提示 2 在資料載入成功之後新增 mbprogresshud hidehudforview self view anim...