天天看點

Can't connect to local MySQL server through socket '/tmp/mysql.sock'

網站突然報錯:

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 &amp;

第二步(軟連接配接):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 &amp;

# /usr/local/bin/mysql //測試

mysq&gt;bye;

檔案已經解決,重新生成新的/tmp/mysql.sock 和 hostname.pid

   本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/1400477,如需轉載請自行聯系原作者