MySQL服務(wù)器消失的最常見原因是服務(wù)器超時并關(guān)閉了連接仔戈。在這種情況下,您通常會得到以下錯誤代碼之一(您獲得的錯誤代碼與操作系統(tǒng)相關(guān))。
默認情況下靶擦,如果沒有發(fā)生任何事情,服務(wù)器會在八小時后關(guān)閉連接雇毫。您可以通過在啟動mysqld時設(shè)置wait_timeout變量來更改時間限制玄捕。
如果您有腳本,則只需再次發(fā)出查詢棚放,客戶端就可以自動重新連接枚粘。這假設(shè)您在啟用的客戶端中具有自動重新連接(這是mysql命令行客戶端的默認設(shè)置)。
MySQL服務(wù)器消失的一些其他常見原因是:
1飘蚯、您(或數(shù)據(jù)庫管理員)已使用KILL語句或mysqladmin kill命令終止正在運行的線程馍迄。
2、您嘗試在關(guān)閉與服務(wù)器的連接后運行查詢局骤。這表示應(yīng)該更正的應(yīng)用程序中存在邏輯錯誤攀圈。
3、在不同主機上運行的客戶端應(yīng)用程序沒有從該主機連接到MySQL服務(wù)器的必要權(quán)限峦甩。
4赘来、您從客戶端的TCP / IP連接獲得超時。如果您一直在使用以下命令凯傲,則可能會發(fā)生這種情況:mysql_options(...犬辰,MYSQL_OPT_READ_TIMEOUT,...)或mysql_options(...冰单,MYSQL_OPT_WRITE_TIMEOUT忧风,...)。在這種情況下球凰,增加超時可能有助于解決問題
5狮腿、您在服務(wù)器端遇到超時腿宰,并且客戶端中的自動重新連接被禁用(MYSQL結(jié)構(gòu)中的重新連接標志等于0)。
6缘厢、您正在使用Windows客戶端吃度,并且在發(fā)出命令之前服務(wù)器已斷開連接(可能是因為wait_timeout已過期)。Windows上的問題是贴硫,在某些情況下椿每,MySQL在寫入到服務(wù)器的TCP / IP連接時不會從操作系統(tǒng)中獲得錯誤,而是在嘗試從連接中讀取答案時收到錯誤英遭。
7间护、如果向服務(wù)器發(fā)送不正確或太大的查詢,也可能會出現(xiàn)這些錯誤挖诸。如果mysqld收到的數(shù)據(jù)包太大或無序汁尺,則會假定客戶端出現(xiàn)問題并關(guān)閉連接。如果需要大查詢(例如多律,如果使用大型BLOB列)痴突,可以通過設(shè)置服務(wù)器的max_allowed_pa??cket變量來增加查詢限制,該變量的默認值為64MB狼荞。您可能還需要增加客戶端的最大數(shù)據(jù)包大小辽装。
插入大量行的INSERT或REPLACE語句也可能導(dǎo)致這些類型的錯誤。這些語句中的任何一個都向服務(wù)器發(fā)送單個請求相味,而不管要插入的行數(shù)是多少;因此拾积,您通常可以通過減少每個INSERT或REPLACE發(fā)送的行數(shù)來避免錯誤丰涉。
8殷勘、如果主機名查找失敗(例如昔搂,如果您的服務(wù)器或網(wǎng)絡(luò)所依賴的DNS服務(wù)器發(fā)生故障),也可能會看到此錯誤输拇。這是因為MySQL依賴于主機系統(tǒng)進行名稱解析摘符,但無法知道它是否正常工作 - 從MySQL的角度來看,問題與任何其他網(wǎng)絡(luò)超時無法區(qū)分策吠。
如果使用--skip-networking選項啟動MySQL逛裤,您可能還會看到MySQL服務(wù)器已經(jīng)消失。
如果MySQL端口(默認3306)被防火墻阻止猴抹,則可能導(dǎo)致此錯誤的另一個網(wǎng)絡(luò)問題带族,從而阻止任何連接到MySQL服務(wù)器。
9蟀给、您也可以使用fork子進程的應(yīng)用程序遇到此錯誤蝙砌,所有這些進程都嘗試使用與MySQL服務(wù)器相同的連接阳堕。通過為每個子進程使用單獨的連接可以避免這種情況。
10择克、您遇到了執(zhí)行查詢時服務(wù)器死機的錯誤恬总。
您可以通過執(zhí)行mysqladmin版本并檢查服務(wù)器的正常運行時間來檢查MySQL服務(wù)器是否已死亡并重新啟動。如果因為mysqld崩潰并重新啟動而導(dǎo)致客戶端連接中斷肚邢,則應(yīng)集中精力查找崩潰的原因壹堰。首先檢查是否再次發(fā)出查詢會再次殺死服務(wù)器。
如果要創(chuàng)建有關(guān)此問題的錯誤報告骡湖,請確保包含以下信息:
1贱纠、指示MySQL服務(wù)器是否已死亡。您可以在服務(wù)器錯誤日志中找到有關(guān)此內(nèi)容的信息响蕴。
2谆焊、如果特定查詢殺死m(xù)ysqld并且在運行查詢之前使用CHECK TABLE檢查了所涉及的表,那么您是否可以提供可重現(xiàn)的測試用例换途?
3懊渡、MySQL服務(wù)器中wait_timeout系統(tǒng)變量的值是多少?(mysqladmin變量為您提供此變量的值军拟。)您是否嘗試在啟用常規(guī)查詢?nèi)罩镜那闆r下運行mysqld以確定問題查詢是否出現(xiàn)在日志中剃执?
以上翻譯自mysql官方文檔