關於Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)的問題

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

首先是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連接的時候,又出現這個問題了
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將會使用內建在mysql中的默認值
於是,我修改了這個值,設置爲:
mysql.default_socket=/var/lib/mysql/mysql.sock然後我重新啓動apache,結果無效;reboot系統,結果無效
我火大了,php就非得去連接/tmp/mysql.sock,可是我的系統裏面就是沒有這個路徑下的這個文件,那我就給你鏈接一個,於是我做了下面的操作,
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

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

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

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
提示權限不足,我是root用戶耶,還提示權限不足,奇怪了
~~~~
ll /var/lib/mysql/mysql.sock
看到的屬性是:
srwxrwxrwx 1 mysql mysql 0 11-21 14:39 /var/lib/mysql/mysql.sock
這個屬性引起了我的注意,檔案類型標誌是s,還真沒去了解過這樣的類型,到鳥哥的私房菜去找了一下,原來,這個是資料接口檔,用我們大陸說的習慣應該是套接字文件(sockets),這種文件一般用在網絡上的資料套接,mysqld守護進程生成了這個文件,其他與mysql相關的程序想使用mysql,估計就是通過這個文件了。
這種特殊文件即使是最高權限的root用戶,也是不能查看不能編輯的,有點像檔案標誌是p的管道文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章