Mac os 解決無法使用localhost連接mysql問題
今天在mac上搭建好了php的環(huán)境,把先前在window、linux下運行良好的程序放在mac上,居然出現(xiàn)訪問不了數(shù)據(jù)庫,數(shù)據(jù)庫連接的host用的是localhost,可以確認數(shù)據(jù)庫配置是正確的,因為在java中使用localhost訪問正常,另外通過命令行工具也能正常訪問。當把localhost換成127.0.0.1或者本機的IP時,居然正常了。以前一直認為localhost與127.0.0.1是一回事,現(xiàn)在事實證明它們其中還是有區(qū)別的。
在網上搜索了一下它們的區(qū)別,有人已經說的很明白了,具體可以參看:http://www.dbjr.com.cn/article/50422.htm。它們的主要區(qū)別是localhost是通過socket方式來連接,而127.0.0.1則是走的TCP協(xié)議。
上面提到區(qū)別就是導致mac下無法連接數(shù)據(jù)庫的原因。那為什么socket方式無法連接呢?由于mac os lion上已經自帶了apache和php,我的環(huán)境使用就使用默認的,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:
echo "show variables" | mysql | grep "socket"
方法二:
echo "status" | mysql | grep "socket"
注意:如果mysql設置了密碼,使用-u,-p來指定用戶名和密碼
這里看到mysql的socket文件存放位置為/tmp/mysql.sock。
看到這兒應該知道問題所在了吧,使用localhost連接失敗的原因為在socket的方式下,php默認配置的mysql服務的socket文件不存在,所以導致連接失敗,如果把連接失敗的錯誤信息dump出來,你應該會看到錯誤信息中包含了“No such file or directory”。
知道原因就容易修改了,只需要把php配置文件中mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket這三項值修改為mysql服務配置對應值即可,修改好后需要重啟apache服務。當然也可以修改mysql配置文件中的socket信息,使其保持一致即可,修改好后重啟mysql服務。
相關文章
在Mysql上創(chuàng)建數(shù)據(jù)表實例代碼
這篇文章主要介紹了如何在Mysql上創(chuàng)建數(shù)據(jù)表,需要的朋友可以參考下2014-03-03Mysql中in和exists的區(qū)別?&?not?in、not?exists、left?join的相互轉換問題
這篇文章主要介紹了Mysql中in和exists的區(qū)別?&?not?in、not?exists、left?join的相互轉換,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Node.js下向MySQL數(shù)據(jù)庫插入批量數(shù)據(jù)的方法
這篇文章主要介紹了Node.js下向MySQL數(shù)據(jù)庫插入批量數(shù)據(jù)的實現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-10-10