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