Mac 解决localhost无法连接mysql问题

事发经过:
之前的一个项目代码,在window、linux下运行良好的程序都可以正常运行,最近放到mac上,居然出现访问不了数据库的问题,数据库连接的host用的是localhost,可以确认数据库配置是正确的,我试着把localhost 换成 127.0.0.1时,居然可以正常运行了。

以前一直认为localhost127.0.0.1是一回事,现在事实证明它们其中还是有区别的。

在网上搜索了一下它们的区别,有很多。我这里主要说一点:它们的主要区别是localhost是通过socket方式来连接,而127.0.0.1则是走的TCP协议。

原因:由于mac 上已经自带了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:

复制代码 代码如下:
echo "show variables" | mysql | grep "socket"

方法二:

复制代码 代码如下:
echo "status" | mysql | grep "socket"

注意:如果mysql设置了密码,使用-u,-p来指定用户名和密码: echo "status" | mysql  -u  -p | grep "socket"
这里看到mysql的socket文件存放位置为/tmp/mysql.sock

所以使用localhost连接失败的原因为:在socket的方式下,php默认配置的mysql服务的socket文件不存在,所以导致连接失败,如果把连接失败的错误信息dump出来,你应该会看到错误信息中包含了“No such file or directory”。

解决:

1、只需要把php配置文件中mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket这三项值修改为mysql服务配置对应值即可,修改好后需要重启apache服务。
2、修改mysql配置文件中的socket信息,使其保持一致即可,修改好后重启mysql服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值