找不到mysql socket的問題,我最近碰到了好多次
重裝系統(tǒng)以前,我的mysql,apache,php都是自己編譯安裝的,當時并沒有碰到這些問題,
重裝系統(tǒng)以后,我的mysql是通過yum安裝的,apache1.37和php5.2是自己編譯安裝的,出現(xiàn)了這個問題

首先是mysqld啟動不了,
我通過vim /etc/my.cnf,修改了[mysqld]選項下面的socket的值
socket=/var/lib/mysql/mysql.sock

ok,mysqld可以啟動了

接下來,是mysql啟動不了,同樣,vim /etc/my.cnf,添加了如下腳本:
[mysql]
socket
=/var/lib/mysql/mysql.sock

然后,mysqladmin啟動不了,還是一樣,在[mysqladmin]下面socket值設置為同樣的路徑
ok,可以啟動了

最后,用php連接的時候,又出現(xiàn)這個問題了
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
我首先想到的是,在/etc/php.ini修改mysql.default_socket的值,在這個文件中,關于mysql.default_socket的值的說明是這樣的,
; Default socket name for local MySQL connects.? If empty, uses the built-in MySQL defaults.
這個值一開始是空的,也就是說,如果我們不主動去修改的話,php將會使用內(nèi)建在mysql中的默認值
于是,我修改了這個值,設置為:
mysql.default_socket=/var/lib/mysql/mysql.sock
然后我重新啟動apache,結(jié)果無效;reboot系統(tǒng),結(jié)果無效
我火大了,php就非得去連接/tmp/mysql.sock,可是我的系統(tǒng)里面就是沒有這個路徑下的這個文件,那我就給你鏈接一個,于是我做了下面的操作,
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

重新打開我的php頁面,ok,這下能連接到數(shù)據(jù)庫了。

就這樣,我把這個問題解決了,可是我還是有點迷糊,為什么一定要去找/tmp/mysql.sock這個文件,是不是一開始我就給它ln一個鏈接就可以解決?這個mysql.sock到底是用來做什么的?于是我就產(chǎn)生了看看這個文件內(nèi)容的想法,

cat /var/lib/mysql/mysql.sock
提示我,cat: /var/lib/mysql/mysql.sock: 沒有那個設備或地址

less /var/lib/mysql/mysql.sock
/var/lib/mysql/mysql.sock is not a regular file (use -f to see it)
我強行查看!
less -f /var/lib/mysql/mysql.sock
/var/lib/mysql/mysql.sock: 沒有那個設備或地址
~~
vim /var/lib/mysql/mysql.sock
提示權(quán)限不足,我是root用戶耶,還提示權(quán)限不足,奇怪了
~~~~
ll /var/lib/mysql/mysql.sock
看到的屬性是:
srwxrwxrwx 1 mysql mysql 0 11-21 14:39 /var/lib/mysql/mysql.sock
這 個屬性引起了我的注意,檔案類型標志是s,還真沒去了解過這樣的類型,到鳥哥的私房菜去找了一下,原來,這個是資料接口檔,用我們大陸說的習慣應該是套接 字文件(sockets),這種文件一般用在網(wǎng)絡上的資料套接,mysqld守護進程生成了這個文件,其他與mysql相關的程序想使用mysql,估計 就是通過這個文件了。
這種特殊文件即使是最高權(quán)限的root用戶,也是不能查看不能編輯的,有點像檔案標志是p的管道文件。