MySQL下mysql.sock丟失問題的解決[ubuntu, linux, mysqld.sock]


MySQL下mysql.sock丟失丟失的原因一般是因為配置文件不一致的原因,mysqld 錯誤啟動,mysqld_safe 會清除一次mysql.sock 。解決方法是:

判斷一般人解決故障時沒有切換到mysql用戶,造成權限有問題,無法創建mysql授權表,所以也就無法創建/tmp/mysql.sock 和hostname.pid文件。因此,總結解決方法如下(注: 使用root也可以):

#su mysql

$/usr/local/bin/mysql_install_db //重建授權表

$/usr/local/bin/mysqld_safe &

$/usr/local/bin/mysql //測試

mysq>bye;

$

文件已經解決,重新生成新的 /tmp/mysql.sock 和 hostname.pid

$su root

 

關於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的管道文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM