nginx與mysql“勾結”比較常見的錯誤就是,當本伺服器的mysql主機預設為localhost的時候,nginx往往無法發現其資料庫,哪怕是賬号密碼都正确也發現不了,進而資料庫裡的内容不能以網頁的形式呈現出來。
這種情況是為嘛呢?
這個情況主要是因為在linux下,nginx預設與mysql的連結不是用tcp協定而是socket,但是當我們打開mysql的相關檔案時候,會看見mysql把socket檔案指向為no_value,如圖:
<a href="http://s4.51cto.com/wyfs02/M02/7F/CC/wKioL1ctlxHAWv6iAAEK2zl0j0c667.png" target="_blank"></a>
來到/var/lib/mysql/檔案夾下,會看到有一個mysql.sock,這是一個粉色檔案。
然後傳回到php的安裝檔案夾下,打開檔案夾下的lib/php會看到php.ini,如果沒有這個檔案,就傳回到php的最初解壓縮的下載下傳包裡,找到php.ini-development,把這個檔案cp到lib/php那個檔案夾裡。
打開php.ini-development,發現mysql-socket也是空,如圖:
<a href="http://s1.51cto.com/wyfs02/M00/7F/CE/wKiom1ctmZvh8f2IAAA1rGguMKA798.png" target="_blank"></a>
于是把粉色檔案mysql.sock的完整路徑填寫到mysql.default_socket後面即可。然後儲存退出,重新開機php-fpm,這時候重新重新整理nginx的mysql綁定資料庫頁面,就應該可以看到資料庫被成功重新整理了(至少會有一個test預設資料庫)。
當然,如果你不喜歡socket通信,就可以把資料庫主機的localhost改成127.0.0.1,強迫nginx走tcp 協定也是可以的,這樣就不用費那麼多事兒了。
<b> 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1771018</b>