Mac 解決localhost沒法鏈接mysql問題

事發通過:
以前的一個項目代碼,在window、linux下運行良好的程序均可以正常運行,最近放到mac上,竟然出現訪問不了數據庫的問題,數據庫鏈接的host用的是localhost,能夠確認數據庫配置是正確的,我試着把localhost 換成 127.0.0.1時,竟然能夠正常運行了。php

之前一直認爲localhost127.0.0.1是一回事,如今事實證實它們其中仍是有區別的。mysql

在網上搜索了一下它們的區別,有不少。我這裏主要說一點:它們的主要區別是localhost是經過socket方式來鏈接,而127.0.0.1則是走的TCP協議。linux

緣由:因爲mac 上已經自帶了apache和php,個人環境使用就使用默認的,mysql 服務是在官網下載dmg安裝最近版本,php的配置文件(/ect/php.ini)中設置有三個地方(mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket)設置了mysql socket文件存放的位置,其默認值爲/var/mysql/mysql.socksql

查看mysql服務使用的socket文件有兩種方式
方法1:數據庫

複製代碼 代碼以下:
echo "show variables" | mysql | grep "socket"apache

方法二:socket

複製代碼 代碼以下:
echo "status" | mysql | grep "socket"spa

注意:若是mysql設置了密碼,使用-u,-p來指定用戶名和密碼: echo "status" | mysql  -u  -p | grep "socket"
這裏看到mysql的socket文件存放位置爲/tmp/mysql.sockpdo

因此使用localhost鏈接失敗的緣由爲:在socket的方式下,php默認配置的mysql服務的socket文件不存在,因此致使鏈接失敗,若是把鏈接失敗的錯誤信息dump出來,你應該會看到錯誤信息中包含了「No such file or directory」。mysqli

解決:

一、只須要把php配置文件中mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket這三項值修改成mysql服務配置對應值便可,修改好後須要重啓apache服務。 二、修改mysql配置文件中的socket信息,使其保持一致便可,修改好後重啓mysql服務。