Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) ";
是你的mysql.sock 文件不存在了,
多是被你不當心刪除了,
鏈接localhost一般經過一個Unix域套接字文件進行,通常是/tmp/mysql.sock。若是套接字文件被刪除了,本地客戶就不能鏈接。這可能發生在你的系統運行一個cron任務刪除了/tmp下的臨時文件。
若是你由於丟失套接字文件而不能鏈接,你能夠簡單地經過重啓服務器從新建立獲得它。由於服務器在啓動時從新建立它。
另外一個解決辦法是你如今不能用套接字創建鏈接由於它不見了,你能夠創建一個TCP/IP鏈接,例如,若是服務器主機是192.168.0.1,你能夠這樣鏈接:
%mysql -u root -h 192.168.0.1 -p
%mysqladmin -u root -h 192.168.0.1 -p shutdown
若是套接字文件被一個cron任務刪除,問題將重複出現,除非你修改cron任務或使用一個或使用一個不一樣的套接字文件,你可使用全局選項文件指定一個 不一樣的套接字,例如,若是數據目錄是/usr/local/var,你能夠經過將下列行加入/etc/my.cnf中,將套接字文件移到那裏:
[mysqld]
socket=/usr/local/var/mysql.sock
[client]
socket=/usr/local/var/mysql.sock
對服務器和客戶均指定路徑名,使得它們都使用同一個套接字文件。若是你只爲服務器設置路徑,客戶程序將仍然指望在原位置執行套接字,在修改後重啓服務器,使它在新位置建立套接字
=============================================
怎樣保護「/tmp/mysql.sock 」不被刪除
若是你有這個問題,事實上任何人能夠刪除MySQL通信套接字「/tmp/mysql.sock」,在Unix的大多數版本上,你能經過爲其設置sticky(t)位來保護你的「/tmp」文件系統。做爲root登陸而且作下列事情:
shell> chmod +t /tmp
這將保護你的「/tmp」文件系統使得文件僅能由他們的全部者或超級用戶(root)刪除。
你能執行ls -ld /tmp檢查sticky位是否被設置,若是最後一位許可位是t,該位被設置了。
=============================================
一個MySQL客戶能夠兩種不一樣的方式鏈接mysqld服務器:Unix套接字,它經過在文件系統中的一個文件(缺省「/tmp /mysqld.sock」)進行鏈接;或TCP/IP,它經過一個端口號鏈接。Unix套接字比TCP/IP更快,可是隻有用在鏈接同一臺計算機上的服 務器。若是你不指定主機名或若是你指定特殊的主機名localhost,使用Unix套接字。
錯誤(2002)Can 't connect to ...一般意味着沒有一個MySQL服務器運行在系統上或當試圖鏈接mysqld服務器時,你正在使用一個錯誤的套接字文件或TCP/IP端口。
由檢查(使用ps)在你的服務器上有一個名爲mysqld的進程啓動!若是沒有任何mysqld過程,你應該啓動一個。
若是一個mysqld過程正在運行,你能夠經過嘗試這些不一樣的鏈接來檢查服務器(固然,端口號和套接字路徑名可能在你的安裝中是不一樣的):
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host ' version
shell> mysqladmin --socket=/tmp/mysql.sock version
注意hostname命令使用反引號「`」而非正引號「 '」;這些致使hostname輸出(即,當前主機名)被代替進mysqladmin命令中。
這是可能形成Can 't connect to local MySQL server錯誤的一些緣由:
mysqld不在運行。
你正在使用MIT-pthreads的一個系統上運行。若是正在運行在一個沒有原生線程的系統上,mysqld使用 MIT-pthreads 軟件包。然而,MIT-pthreads不支持Unix套接字,所以當與服務器鏈接時,在這樣一個系統上,你老是必須明確地指定主機名。試試使用這個命令 檢查到服務器的鏈接:
shell> mysqladmin -h `hostname` version
某人刪除了mysqld使用的Unix套接字(缺省「/tmp/mysqld.sock」)。你可能有一個cron任務刪除了MySQL套接字(例如,一 個把舊文件從「/tmp」目錄中刪除的任務)。你老是能夠運行mysqladmin version而且檢查mysqladmin正在試圖使用的套接字確實存在。在這種狀況下,修復方法是刪除cron任務而不刪除「mysqld.sock 或將套接字放在其餘地方。你能用這個命令在MySQL配置時指定一個不一樣的套接字地點:
shell> ./configure --with-unix-socket-path=/path/to/socket
你也可使用--socket=/path/to/socket選項啓動safe_mysqld和在啓動你的MySQL客戶前設置環境變量 MYSQL_UNIX_PORT爲套接字路徑名。你可用--socket=/path/to/socket選項啓動mysqld服務器。若是你改變了服務 器的套接字路徑名,你也必須通知MySQL客戶關於新路徑的狀況。你能夠經過設置環境變量MYSQL_UNIX_PORT爲套接字路徑名或由提供套接字路 徑名做爲客戶的參數作到。你可用這個命令測試套接字:
shell> mysqladmin --socket=/path/to/socket version
你正在使用 Linux和線程已經死了(核心傾倒了)。在這種狀況中,你必須殺死其它mysqld線程(例如在啓動一個新的MySQL服務器以前,能夠用mysql_zap腳本)。見18.1 若是MySQL老是崩潰怎麼辦。
若是你獲得錯誤Can 't connect to MySQL server on some_hostname,你能夠嘗試下列步驟找出問題是什麼:
經過執行telnet your-host-name tcp-ip-port-number而且按幾回回車來檢查服務器是否正常運行。若是有一個MySQL運行在這個端口上,你應該獲得一個包含正在運行的 MySQL服務器的版本號的應答。若是你獲得相似於telnet: Unable to connect to remote host: Connection refused的一個錯誤,那麼沒有服務器在使用的端口上運行。
嘗試鏈接本地機器上的mysqld守護進程,並用mysqladmin variables檢查mysqld被配置使用的TCP/IP端口(變量port)。
檢查你的mysqld服務器沒有用--skip-networking選項啓動。
不要使用 mysql -h 'localhost '來鏈接mysql服務器,這樣的語句只能在同一臺機子上運行,用mysql -h 127.0.0.1 這樣的語句來鏈接服務器。mysql