|
發現問題
昨天在幫同事編譯安裝Linux環境時,遇到一個問題:
WEB服務器是apache,數據庫是MySQL。
于是寫了一個測試連接數據庫的php頁面:
復制代碼 代碼如下:$mysql = mysql_connect('localhost','root','');
打開 http://localhost/test.php 測試
提示:Can't connect to local MySQL server through socket...
檢查環境正常
以為是數據庫沒有啟動,于是查看一下進程,MySQL在進程里,重啟了一下MySQL.
使用mysql -u root -p 可以進入MySQL操作界面
直接使用/usr/local/php5/bin/php /web/test.php執行可以連上數據庫
apache也重啟了,一樣無效
疑點:為何網頁執行失敗,命令執行卻成功
這下就郁悶了,使用php命令直接執行就成功,通過網頁執行就失敗。難道是apache導致?網上搜索了大堆資料也沒找到解決方案,重新編譯安裝apache問題依舊。
把localhost改成127.0.0.1成功
把localhost改成127.0.0.1后竟然連接成功了,開始陷入思考困局:localhost失敗127.0.0.1卻成功?
ping localhost 地址是127.0.0.1沒錯
打開hosts加入
復制代碼 代碼如下:
127.0.0.1 qttc
使用qttc當主機連接也正常,唯獨就不認localhost。
localhost連接方式不同導致
為了了解php連接數據庫時,主機填寫localhost與其它的區別閱讀了大量資料,最后得知:
當主機填寫為localhost時mysql會采用 unix domain socket連接
當主機填寫為127.0.0.1時mysql會采用tcp方式連接
這是linux套接字網絡的特性,win平臺不會有這個問題
解決方法
在my.cnf的[mysql]區段里添加
復制代碼 代碼如下:protocol=tcp
保存重啟MySQL,問題解決!
php技術:PHP中使用localhost連接Mysql不成功的解決方法,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。