mac os lion 上php连接mysql数据库不能使用使用localhost问题
2013-07-27 16:41
423 查看
今天在mac上搭建好了php的环境,把先前在window、linux下运行良好的程序放在mac上,居然出现访问不了数据库,数据库连接的host用的是localhost,可以确认数据库配置是正确的,因为在java中使用localhost访问正常,另外通过命令行工具也能正常访问。当把localhost换成127.0.0.1或者本机的IP时,居然正常了。以前一直认为localhost与127.0.0.1是一回事,现在事实证明它们其中还是有区别的。
在网上搜索了一下它们的区别,有人已经说的很明白了,具体可以参看:http://blog.sina.com.cn/s/blog_40e1ba640100ivjj.html,http://www.diybl.com/course/7_databases/mysql/myxl/20090722/168062.html。它们的主要区别是localhost是通过socket方式来连接,而127.0.0.1则是走的TCP协议。
上面提到区别就是导致mac下无法连接数据库的原因。那为什么socket方式无法连接呢?由于mac os lion上已经自带了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:
方法二:
注意:如果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服务。
在网上搜索了一下它们的区别,有人已经说的很明白了,具体可以参看:http://blog.sina.com.cn/s/blog_40e1ba640100ivjj.html,http://www.diybl.com/course/7_databases/mysql/myxl/20090722/168062.html。它们的主要区别是localhost是通过socket方式来连接,而127.0.0.1则是走的TCP协议。
上面提到区别就是导致mac下无法连接数据库的原因。那为什么socket方式无法连接呢?由于mac os lion上已经自带了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来指定用户名和密码
这里看到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服务。
相关文章推荐
- Mac os X下使用Nginx跟PHP的连接问题
- 在Mac OS X系统下用PHP连接MySQL数据库时的问题
- mysql能用localhost连接不能使用127.0.0.1连接的问题之一
- 解决用PHP连接狗日的SQLSERVER不能使用UTF8,导致乱码的问题
- Fluid Mask 3.3.16 在 mac OS X Sierra (10.12) 和 High Sierra (10.13)系统中无法启动和不能作为PhotoShop 插件使用问题修复
- Mac OS X升级到10.11之后不能使用pod的问题解决方法
- Mac下配置Phpstorm和MySQL数据库与post不能使用的问题
- 关于php中使用IP和localhost连接问题
- SQL Server 2005数据库使用机器名称和localhost都能连接,但是使用IP地址却不能连接的问题
- php程序连接mysql只能使用localhost,不能使用127.0.0.1
- <php+mysql>从PHP连接数据库,以及mysqli_connect()不能使用localhost的解答
- WINCE6.0 远程工具,不能使用ActiveSync连接的问题
- 解决VC++在WIN7下使用ADO方式连接ACCESS数据库到XP不能运行的问题
- MySQL数据库参数设置不当导致应用不能连接问题
- 在使用Telnet连接localhost时所遇到的问题及解决方案
- MYSQL - php 使用 localhost 无法连接数据库
- 解决编译安装的PHP无法通过localhost连接mysql的问题
- Mac OS X系统中Eclipse使用问题汇总
- Mac OS X下Android系统M2、华为部分手机无法连接问题之解决方案
- Mac OS X Lion 配置 PHP-Xdebug 调试