解決編譯安裝的PHP沒法經過localhost鏈接mysql的問題

首先搞清楚mysql之鏈接localhost與127.0.0.1的區別:php


127.0.0.1屬於TCP/IP鏈接,是經過網卡傳輸,依賴網卡,並受到網絡防火牆和網卡相關的限制。localhot屬於Unix socket方式鏈接,是不經網卡傳輸!它不會解析成 IP,不受網絡防火牆和網卡相關的的限制,也不會佔用網卡、網絡資源。通常設置程序時本地服務用localhost是最好的。mysql




個人操做系統php使用127.0.0.1卻能鏈接mysql:sql

wKiom1jqQ3CiarFvAAB2ho0X57g813.png



但沒法經過localhost鏈接mysql:網絡

wKiom1jqQy7AGiKRAABwCCTED2Y556.png


嘗試phpmyadmin也遇到一樣的錯誤,不過也出現比較有價值的錯誤提示(套接字沒有正確設置):socket

wKioL1jqQy_AzP5iAACKF3176UM769.png

這裏說套接字指的是php跟mysql通訊的一個.sock文件。
ide


分析一下問題:spa

個人mysql使用的是mariadb5.5,經過yum安裝,因此問題出在mysql自己的可能性幾乎沒有。操作系統


經過phpinfo查找socket關鍵字,能夠發現mysql.default_socket沒有設置默認值,而pdo_mysql給出了默認值,sock的位置3d


wKiom1jqSIfiinb8AAAOUK_tjds538.png

wKioL1jqSIfzr-A5AAAvnmfMH98595.png


編輯php.ini給予mysql.default_socket默認路徑,而且跟mysql的套接字文件存放路徑對應按理就能解決問題。不過還有個偷懶的辦法,把mysql的套接字文件在php指定的默認路徑建立軟鏈接,就無需修改php.ini了。orm


查看mysql套接字路徑:

# cat /etc/my.cnf

wKioL1jqShqiGzMTAABXV69bLKM395.png


建立軟鏈接:

# ln -s /var/lib/mysql/mysql.sock /tmp 

wKioL1jqSquzJVsXAABDPv2gJ1I660.png


問題解決:

wKioL1jqSzLjp9DyAADO678bZK0109.png

相關文章
相關標籤/搜索