解决编译安装的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

相关文章
相关标签/搜索