發(fā)生MySQL server has gone away的最常見原因是連接閑置超時(shí),被服務(wù)器中斷連接。默認(rèn)情況下,服務(wù)器關(guān)閉空閑時(shí)間超過8小時(shí)的連接,可以通過設(shè)置變量wait_timeout,來改變默認(rèn)值8小時(shí),同時(shí)還需要修改interactive_timeout。
wait_timeout:服務(wù)器關(guān)閉非交互連接之前等待活動(dòng)的秒數(shù)。
interactive_timeout:服務(wù)器關(guān)閉交互式連接前等待活動(dòng)的秒數(shù)
MySQL命令行默認(rèn)是重連的,但有一些應(yīng)用程序沒有重連的機(jī)制,往往會(huì)導(dǎo)致執(zhí)行失敗。
導(dǎo)致MySQL server has gone away錯(cuò)誤的一些其他原因如下:
(1).使用KILL命令或mysqladmin kill命令殺死了正在運(yùn)行的線程
(2).在關(guān)閉了與服務(wù)器的連接后試圖運(yùn)行查詢
(3).在客戶端的一側(cè)遇到TCP/IP連接超時(shí)錯(cuò)誤
(4).在服務(wù)器端遇到超時(shí)錯(cuò)誤,而且禁止了客戶端中的自動(dòng)連接機(jī)制
(5).如果向服務(wù)器發(fā)出了不正確或過大的查詢,也會(huì)遇到這類問題,如果mysqld收到過大的或者無序的信息包,它會(huì)認(rèn)為客戶端出錯(cuò)并關(guān)閉連接。如果需要執(zhí)行較大的查詢,則可以通過設(shè)置服務(wù)器的max_allowed_packet
變量,增加查詢限制值,該變量的默認(rèn)值是1MB。