找不到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的管道文件。