天天看點

mysql 2013錯誤解決

今天,莫名其妙的來了個mysql 2013錯誤,導緻無法登陸mysql gui工具,而且dos也進不去,提示ping 127.0.0.1,百度+google後:

這是在使用 mysql 的過程中,困擾我很久的一個問題,今天終于找到根本原因,得以徹底解決,真是可喜可賀啊!下面詳細地總結一下:

問題描述:在使用 mysql 的過程中發現,偶爾的查詢或一段時間内的登入會失敗,傳回的錯誤提示資訊為:Lost Connection During Query。

問題定位:這個問題在半年、甚至一年前都遇到過,由于它不是必現,往往你去看的時候沒法重制,并且一個 mysql server 管理好多個資料庫,查詢又不是時刻發生的,常常不知所措。無法登入時,更是束手無策。最初,比較粗暴的方法是重新開機 mysql,問題在一段時間内能緩解。後來,使用 flush tables 也能在一段時間内緩解。再後來,通過檢視 mysql 的錯誤日志,發現一共有三種提示資訊:第一種:080724 19:55:05 [ERROR] Error in accept: Too many open files,這種明顯是由于 mysql 打開檔案個數過多,mysql 無法再“接收”新的連接配接進來,也就是沒有辦法登入,造成連接配接失敗。第二種:080724 19:45:11 [ERROR] /usr/local/mysql/bin/mysqld: Sort aborted,這種是放棄了排序,但沒有說明原因。第三種:080725 9:30:33 [ERROR] /usr/local/mysql/bin/mysqld: Can't open file: 'OperateRecord.MRG' (errno: 24),這種是打開檔案失敗,錯誤碼是24,通過 perror 查詢詳細的錯誤原因是:OS error code 24: Too many open files,也是打開檔案過多。再通過 status 檢視 mysql 的打開檔案個數,此時一般都接近 1000 個。再通過 show variables 檢視 mysql 的配置,預設其打開檔案個數為 open_files_limit 為 2048,按道理說這個大小是足夠的。

問題解決:

1、重新開機mysql服務,解決問題,如果沒有解決,參考第二條(我自己這樣搞解決了)

原來 mysql 中的 open_files_limit 隻是限制 mysql 這個程序打開的最大檔案個數。而核心也會對 mysql 打開的程序數進行限制,并且優先級要高。通過 ulimit -a 檢視 mysql 這個使用者的最大打開檔案個數,發現其值為 1024(linux 預設都是1024)。原來,mysql 已經打開了近 1000 個表,若再打開一個 merge 表(包含100個子表),導緻檔案句柄過多而失敗。通過修改 /etc/security/limits.conf 配置檔案,添加如下行:*                -       nofile          4096,把該限制放大,重新啟動 mysql ,問題得到徹底解決。

設定 mysql 打開檔案限制方法:把 set-variable=open_files_limit=10240 加到配置檔案中。若轉載請注明出處!若有疑問,請回複交流!