今天在mac上搭建好了php的環境,把先前在window、linux下運行良好的程序放在mac上,竟然出現訪問不了數據庫,數據庫鏈接的host用的是localhost,能夠確認數據庫配置是正確的,由於在java中使用localhost訪問正常,另外經過命令行工具也能正常訪問。當把localhost換成127.0.0.1或者本機的IP時,竟然正常了。之前一直認爲localhost與127.0.0.1是一回事,如今事實證實它們其中仍是有區別的。 php
在網上搜索了一下它們的區別,有人已經說的很明白了,具體能夠參看:http://blog.sina.com.cn/s/blog_40e1ba640100ivjj.html,http://www.diybl.com/course/7_databases/mysql/myxl/20090722/168062.html。它們的主要區別是localhost是經過socket方式來鏈接,而127.0.0.1則是走的TCP協議。 html
上面提到區別就是致使mac下沒法鏈接數據庫的緣由。那爲何socket方式沒法鏈接呢?因爲mac os lion上已經自帶了apache和php,個人環境使用就使用默認的,mysql服務是在官網下載dmg安裝最近版本,php的配置文件(/ect/php.ini)中設置有三個地方(mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket)設置了mysql socket文件存放的位置,其默認值爲/var/mysql/mysql.sock。查看mysql服務使用的socket文件有兩種方式
方法1: java
echo "show variables" | mysql | grep "socket"
方法二: mysql
echo "status" | mysql | grep "socket"
注意:若是mysql設置了密碼,使用-u,-p來指定用戶名和密碼
這裏看到mysql的socket文件存放位置爲/tmp/mysql.sock。 linux
看到這兒應該知道問題所在了吧,使用localhost鏈接失敗的緣由爲在socket的方式下,php默認配置的mysql服務的socket文件不存在,因此致使鏈接失敗,若是把鏈接失敗的錯誤信息dump出來,你應該會看到錯誤信息中包含了「No such file or directory」。 sql
知道緣由就容易修改了,只須要把php配置文件中mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket這三項值修改成mysql服務配置對應值便可,修改好後須要重啓apache服務。固然也能夠修改mysql配置文件中的socket信息,使其保持一致便可,修改好後重啓mysql服務。 數據庫