BUG描述:linux Tomcat下xxxxx_com@localhost通路資料庫通路不了
解決辦法:改成:[email protected]即可。
bug分析:在windows也是用localhost連結的 沒有問題。為什麼在linux 下就不行了呢?
MySQL主機127.0.0.1與localhost差別:
1、localhost也叫local ,正确的解釋是:本地伺服器
127.0.0.1在windows等系統的正确解釋是:本機位址(本機伺服器)
他們的解析通過本機的host檔案,windows自動将localhost解析為127.0.0.1
2、localhot(local)是不經網卡傳輸!這點很重要,它不受網絡防火牆和網卡相關的的限制。
127.0.0.1是通過網卡傳輸,依賴網卡,并受到網絡防火牆和網卡相關的限制。
本機IP 也是通過網卡傳輸的,依賴網卡,并受到網絡防火牆和網卡相關的限制。
但是本機IP與127.0.0.1的差別是:
127.0.0.1 隻能通過本機通路
本機IP 通過本機通路也能通過外部通路
一般設定程式時本地服務用localhost是最好的,localhost不會解析成ip,也不會占用網卡、網絡資源。
有時候用localhost可以,但用127.0.0.1就不可以的情況就是在于此。猜想localhost通路時,系統帶的本機目前使用者的權限去通路,而用ip的時候,等于本機是通過網絡再去通路本機,用的到網絡使用者的權限。
發現問題
昨天在幫同僚編譯安裝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,問題解決!
本文轉自許琴 51CTO部落格,原文連結:http://blog.51cto.com/xuqin/1309451,如需轉載請自行聯系原作者