網站突然報錯:
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
<a href="http://s3.51cto.com/wyfs02/M01/24/E6/wKiom1NWB0WgQaseAADxYfeENFU248.jpg" target="_blank"></a>
在mysql的啟動過程中有時會遇到下述錯誤
請問mysql.sock 這個檔案到底起什麼作用?
如何避免發生如此錯誤?
答案一、
這個mysql.sock應該是mysql的主機和客戶機在同一host(實體伺服器)上的時候,使用unix domain socket做為通訊協定的載體,它比tcp快。通常遇到這個問題的原因就是你的mysql server沒運作起來。
看看你的 /tmp/mysql.sock 這個檔案存在否?正常情況下它應該在那裡的,或者用 netstat 看看結果中是否有
Active UNIX domain sockets
答案二、
這個檔案是用于socket連接配接的檔案。
也就是隻有你的守護程序啟動起來這個檔案才存在。
但是你的mysql程式(這個程式是用戶端,伺服器端是mysqld)可以選擇是否使用mysql.sock檔案來連接配接(因為這個方法隻适合在Unix主機上面連接配接本地的mysqld),對于非本地的任何類型的主機。這些在MySQL的手冊(包括晏子翻譯的中文版本,覆寫3.23/4.0版本)都有說明。隻要看看就可以明白。
前面朋友說不能連接配接,最大可能就是mysqld的這個守護程序沒有啟動。
答案三、
Mysql有兩種連接配接方式:
(1)TCP/IP
(2)socket
對mysql.sock來說,其作用是mysql用戶端程式mysql與mysql伺服器端程式mysqlserver處于同一台機器,發起本地連接配接時可用。
例如你無須定義連接配接host的具體IP得,隻要為空或localhost就可以。
在此種情況下,即使你改變mysql的外部port也是一樣可能正常連接配接。
因為你在my.ini中或my.cnf中改變端口後,mysql.sock是随每一次 mysql server啟動生成的。已經根據你在更改完my.cnf後重新開機mysql時重新生成了一次,資訊已跟着變更。
那麼對于外部連接配接,必須是要變更port才能連接配接的。
哦,我說當時用PDO形式連接配接資料庫的方式,是正常的。用普通的mysql_connect()就有問題。
解決辦法:
第一步:mysqld_safe &
第二步(軟連接配接):ln -s /var/lib/mysql/mysql .sock /tmp/mysql .sock
重要參考資料:
<a href="http://www.cnblogs.com/super-lucky/p/superlucky.html" target="_blank">http://www.cnblogs.com/super-lucky/p/superlucky.html</a>
<a href="http://blog.csdn.net/drecik__/article/details/8456333" target="_blank">http://blog.csdn.net/drecik__/article/details/8456333</a>
<a href="http://www.cnblogs.com/wwufengg/articles/mysqld-sock-lost.html" target="_blank">http://www.cnblogs.com/wwufengg/articles/mysqld-sock-lost.html</a>
解決方法如下:
Mysql檔案mysql.sock丢失丢失的原因一般是因為配置檔案不一緻的原因,mysqld 錯誤啟動,mysqld_safe 會清除一次mysql.sock 。判斷解決故障時沒有切換到mysql使用者,造成權限有問題,無法建立mysql授權表,是以也就無法建立/tmp/mysql.sock 和hostname.pid檔案。
是以,總結解決方法如下:
# /usr/local/bin/mysql_install_db //重建授權表
# /usr/local/bin/mysqld_safe &
# /usr/local/bin/mysql //測試
mysq>bye;
檔案已經解決,重新生成新的/tmp/mysql.sock 和 hostname.pid
本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/1400477,如需轉載請自行聯系原作者