mac os lion 上php鏈接mysql數據庫不能使用使用localhost問題

今天在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服務。 數據庫

相關文章
相關標籤/搜索