標籤:oca soc sqli /tmp mysql目錄 串連 str roo 主機名稱
mysql -urootERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
這是mysql登入時找不到通訊端的問題。
首先需要明白的是,Linux端的mysql server啟動時會開啟一個socket,Linux上的MySQL的用戶端在不使用IP串連時mysql server時,預設也會通過通訊端來連結mysql server。
1.mysql server的通訊端檔案。
如果不手動設定my.cnf,那麼預設的socket一般是DATADIR/mysql.sock,而DATADIR如果沒有手動修改,一般預設是/var/lib/mysql目錄。不同的mysql版本,可能socket的預設路徑是/tmp/mysql.sock。
例如我將socket路徑修改為/data/mysql.sock。
2.用戶端串連時使用的通訊端檔案。
在Linux上的各種mysql類用戶端(例如mysql,mysqladmin,mysqldump,mysqlimport等)串連mysql server時,如果指定的主機名稱是‘localhost‘,則會使用通訊端來串連mysql server。因此,必須為這些用戶端指定正確的通訊端。
方法一:在串連命令列上使用"-S"選項指定
mysqladmin -S /data/mysql.sockmysql -S /data/mysql.sockmysqldump -S /data/mysql.sock
方法二:在設定檔中指定
例如在my.cnf中:
[client]socket=/data/mysql.sock
client段的配置表示任何用戶端串連mysql server時都使用該段配置。因此,這樣配置後,無論是mysql、mysqldump、mysqladmin還是其他的用戶端都會使用socket=/data/mysql.sock進行串連。
除了使用[client]指定全域用戶端的串連參數,還可以為特定的用戶端指定串連參數。例如下面為mysql、mysqldump、mysqladmin這3個用戶端分別指定socket串連參數。
[mysql]socket=/data/mysql.sock[mysqldump]socket=/data/mysql.sock[mysqladmin]socket=/data/mysql.sock
注意:如果使用IP,例如mysql -uroot -h‘192.168.100.10‘則表示使用TCP/IP協議串連mysql,這時不會使用通訊端,就沒有通訊端找不到的問題。
Can't connect to local MySQL server through socket