mysql出現(xiàn)ERROR問題:(2006,?‘MySQL?server?has?gone?away‘)
一、問題分析
mysql出現(xiàn)
ERROR : (2006, 'MySQL server has gone away')
的問題意思就是指client和MySQL server之間的鏈接斷開了。
二、原因
造成這樣的原因,最常見的就是采集或者新舊數(shù)據(jù)轉(zhuǎn)化:
一般說sql操作的時間過長,或者是傳送的數(shù)據(jù)太大(例如使用insert ... values的語句過長, 這種情況可以通過修改max_allowed_packed的配置參數(shù)來避免,也可以在程序中將數(shù)據(jù)分批插入(使用mysql limit進行分頁,循環(huán)分批處理數(shù)據(jù)));
應(yīng)用程序(比如PHP)長時間的執(zhí)行批量的MYSQL語句。執(zhí)行一個SQL,但SQL語句過大或者語句中含有BLOB或者longblob字段。比如,圖片數(shù)據(jù)的處理。都容易引起MySQL server has gone away。
- 一種可能是發(fā)送的SQL語句太長,以致超過了max_allowed_packet的大小,只要修改my.cnf,加大max_allowed_packet的值即可。
- 一種可能是因為某些原因?qū)е鲁瑫r,比如說程序中獲取數(shù)據(jù)庫連接時采用了Singleton的做法,雖然多次連接數(shù)據(jù)庫,但其實使用的都是同一個連接,而且程序中某兩次操作數(shù)據(jù)庫的間隔時間超過了wait_timeout(SHOW STATUS能看到此設(shè)置),那么就可能出現(xiàn)問題。最簡單的處理方式就是把wait_timeout改大,當(dāng)然你也可以在程序里時不時順手mysql_ping()一下,這樣MySQL就知道它不是一個人在戰(zhàn)斗。
三、分析原因
原因一:MYSQL服務(wù)宕機了
判斷是否屬于這個原因的方法很簡單,進入mysql控制臺,查看mysql的運行時長
show global status like 'uptime';
或者查看MySQL的報錯日志,看看有沒有重啟的信息—— 如果uptime數(shù)值很大,表明mysql服務(wù)運行了很久了。說明最近服務(wù)沒有重啟過。
如果日志沒有相關(guān)信息,也表名mysql服務(wù)最近沒有重啟過,可以繼續(xù)檢查下面幾項內(nèi)容。
原因二:MYSQL鏈接超時
即某個mysql長連接很久沒有新的請求發(fā)起,達到了server端的timeout,被server強行關(guān)閉。
此后再通過這個connection發(fā)起查詢的時候,就會報錯server has gone away (大部分PHP腳本就是屬于此類)
show global variables like '%timeout';
wait_timeout 是28800秒,即mysql鏈接在無操作28800秒后被自動關(guān)閉
原因三:MYSQL請求鏈接進程被主動KILL
這種情況和原因二相似,只是一個是人為一個是MYSQL自己的動作
show global status like 'com_kill';
原因四:your SQL statement was too large
當(dāng)查詢的結(jié)果集超過 max_allowed_packet 也會出現(xiàn)這樣的報錯。定位方法是打出相關(guān)報錯的語句。
用select * into outfile 的方式導(dǎo)出到文件,查看文件大小是否超過 max_allowed_packet ,如果超過則需要調(diào)整參數(shù),或者優(yōu)化語句。
show global variables like 'max_allowed_packet';
三、處理
修改參數(shù):
set global max_allowed_packet=1024*1024*16;
show global variables like 'max_allowed_packet';
這種情況可以通過修改max_allowed_packed的配置參數(shù)來避免,也可以在程序中將數(shù)據(jù)分批插入(使用mysql limit進行分頁,循環(huán)分批處理數(shù)據(jù))
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql中GROUP_CONCAT函數(shù)使用技巧及問題詳解
這篇文章主要給大家介紹了關(guān)于mysql中GROUP_CONCAT函數(shù)使用技巧及問題的相關(guān)資料,GROUP_CONCAT是MySQL中的一個聚合函數(shù),它用于將多行數(shù)據(jù)按照指定的順序連接成一個字符串并返回結(jié)果,需要的朋友可以參考下2023-11-11MySQL獲取版本號的N種方法(全網(wǎng)最全以及避坑大全)
相信大家在工作學(xué)習(xí)中經(jīng)常有需要查詢 MySQL 數(shù)據(jù)庫版本的情況,這里給大家介紹幾種在 MySQL 中查詢數(shù)據(jù)庫版本的方法以及每種方法適用的場景,相信總有一種可以幫到你,需要的朋友可以參考下2024-10-10MySQL數(shù)據(jù)表分區(qū)策略及優(yōu)缺點分析
項目開發(fā)中,隨著數(shù)據(jù)庫數(shù)據(jù)量越來越大,單個表中數(shù)據(jù)太多,從而導(dǎo)致查詢速度變慢,而且由于表的鎖機制導(dǎo)致應(yīng)用操作也受到嚴重影響,出現(xiàn)了數(shù)據(jù)庫性能瓶頸。因此我們需要考慮分表與分區(qū),MySQL分表分區(qū)就是為了解決大數(shù)據(jù)量導(dǎo)致MySQL性能低下的問題。2021-05-05CentOS 7.2下MySQL的安裝與相關(guān)配置
最近因為工作需要,要在CentOS上安裝MySQL,在安裝的時候遇到了一點問題,花了點時間解決了,感覺不管是官網(wǎng)還是網(wǎng)上的一些教程都不夠完整,不能一次性幫新手解決問題,于是我就結(jié)合官網(wǎng)和網(wǎng)上的資源整理了下,現(xiàn)在分享給大家,希望對有需要的朋友們能有所幫助。2016-11-11CentOS系統(tǒng)下如何設(shè)置mysql每天自動備份
備份是容災(zāi)的基礎(chǔ),是指為防止系統(tǒng)出現(xiàn)操作失誤或系統(tǒng)故障導(dǎo)致數(shù)據(jù)丟失,而將全部或部分數(shù)據(jù)集合從應(yīng)用主機的硬盤或陣列復(fù)制到其它的存儲介質(zhì)的過程。本文將詳細介紹在CentOS系統(tǒng)下如何設(shè)置mysql每天自動備份,有需要的朋友們下面來一起看看吧。2016-10-10利用frm和ibd文件恢復(fù)mysql表數(shù)據(jù)的詳細過程
總是遇到mysql服務(wù)意外斷開之后導(dǎo)致mysql服務(wù)無法正常運行的情況,使用Navicat工具查看能夠看到里面的庫和表,但是無法獲取數(shù)據(jù)記錄,提示數(shù)據(jù)表不存在,所以本文給大家介紹了利用frm和ibd文件恢復(fù)mysql表數(shù)據(jù)的詳細過程,需要的朋友可以參考下2024-04-04如何安裝綠色版MySQL Community Server 5.7.16并實現(xiàn)遠程登錄
這篇文章主要介紹了安裝綠色版MySQL Community Server 5.7.16并實現(xiàn)遠程登錄的方法,需要的的朋友參考下2017-07-07