1. 程式人生 > >記一次 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 排錯流程

記一次 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 排錯流程

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 是一個比較常見的資料庫報錯,而昨天我們的伺服器也報了這個錯誤,所有服務全掛,而且恰逢阿里雲升級,以為是升級的緣故,重啟了下伺服器,發現各種報錯,之後穩定下來了ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 這個錯誤。而本文也主要是講解本次故障排查的經歷。

    首先有必要了解一下 “mysql.sock” 。 在linux與unix系統中的socket檔案是為了建立兩個程式之間的連線使用的 , 而在mysql中,當mysql啟動成功時,會根據配置檔案中設定的路徑(如:tmp/mysql.sock),在tmp中生成mysql.sock,用於連線資料庫使用。而如果沒有此檔案,造成的結果可想而知。
    說說本人這次的經歷,記得午餐回來,突然同事跑過來問我,為什麼網站登陸不上了,總是顯示錯誤,而恰逢阿里雲當時給我發了一條簡訊,即伺服器升級維護有可能造成雲服務不能正常使用,於是作為小白的我重啟了伺服器,發現靜態資源可以訪問了,但是資料庫好像有點問題,比如登陸的時候輸入錯誤密碼,會提示密碼或使用者名稱錯誤,輸入正確密碼的時候又會重定向到登陸頁面,查看了錯誤日誌,顯示session儲存錯誤,貌似存不下session資訊,之後趕緊檢視配置檔案,又沒有檢視到明顯的錯誤,於是又重啟了一下,查看了一下程序,發現mysql又沒有啟動起來。這錯誤還不停的換,也挺有意思的,這次重新進入登陸頁面,輸入任意使用者名稱密碼,直接丟擲資料庫連線失敗的異常,即 ‘ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2)’ ,於是針對這一錯誤的排場開始。
    通過兩次重啟,以及原來系統正常使用可以推斷,有可能是資料庫損壞。於是輸入命令 rpm -qa | grep mysql

,發現出現很多錯誤,如下圖:


這是不是意味著rpm資料庫損壞呢,於是進行rpm資料庫修復 ,繼續輸入命令 rpm --rebuilddb ,重啟伺服器,發現還是報那個錯誤,猜測會不會是猜測是虛擬磁碟出現了

問題。

首先cd /  ,然後輸入df ,  果然 100%佔用。

換一個比較友好的顯示。du -sh *  :

總共20g的系統盤,檔案超過10G的無疑算是大檔案了,不用想,也知道是日誌檔案了,

  cd /home/wwwlogs  ,du -sh * ,果然

發現日誌檔案比較大,而且暫時無用,於是清空>access.log。啟動mysql service mysql start  , 果然啟動成功,問題成功解決。

另外,在排查此錯誤是在網上看了幾篇文件,雖然跟我遇到的情況不一致,不過還是貼出來一下,供大家參考。