PHP中使用localhost连接Mysql不成功的解决方法

发现问题

昨天在帮同事编译安装Linux环境时,遇到一个问题:
WEB服务器是apache,数据库是MySQL。

于是写了一个测试连接数据库的PHP页面:

代码如下:

$mysql = mysql_connect('localhost','root','');

打开 http://localhost/test.php 测试

提示:Can't connect to local MySQL server through socket...

检查环境正常

以为是数据库没有启动,于是查看一下进程,MySQL在进程里,重启了一下MySQL.

使用mysql -u root -p 可以进入MySQL操作界面

直接使用/usr/local/php5/bin/php /web/test.php执行可以连上数据库
apache也重启了,一样无效

疑点:为何网页执行失败,命令执行却成功

这下就郁闷了,使用php命令直接执行就成功,通过网页执行就失败。难道是apache导致?网上搜索了大堆资料也没找到解决方案,重新编译安装apache问题依旧。

把localhost改成127.0.0.1成功

把localhost改成127.0.0.1后竟然连接成功了,开始陷入思考困局:localhost失败127.0.0.1却成功?

ping localhost 地址是127.0.0.1没错

打开hosts加入

代码如下:

127.0.0.1 qttc

使用qttc当主机连接也正常,唯独就不认localhost。

localhost连接方式不同导致

为了了解PHP连接数据库时,主机填写localhost与其它的区别阅读了大量资料,最后得知:

当主机填写为localhost时mysql会采用 unix domain socket连接
当主机填写为127.0.0.1时mysql会采用tcp方式连接
这是linux套接字网络的特性,win平台不会有这个问题

解决方法

在my.cnf的[mysql]区段里添加

代码如下:

protocol=tcp

保存重启MySQL,问题解决!

(0)

相关推荐

  • mysql ERROR 1044 (42000): Access denied for user ''@'localhost' to database

    1. 问题描述: 在MySQL控制台下创建数据库出现以下信息: mysql> CREATE DATABASE python; ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'python' 2. 解决方法: 执行以下命令进入控制台: mysql --user=root -p 输入root用户的密码即可进入mysql控制台: 创建数据库: create database python; 显示所有数据库:

  • MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的原因分解决办法

    MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的解决办法和原因 这两天下载了MySQL5.7.11进行安装,发现到了初次使用输入密码的时候,不管怎样都进不去,即使按照网上说的在mysqld 下面添加skip-grant-tables也是不行,后来研究了两天,终于找出原因和解决办法. 复制代码 代码如下: [mysqlld] skip-grant-tables: 原因

  • linux mysql忘记密码的多种解决或Access denied for user 'root'@'localhost'

    我的系统是ubuntu6.06,最近新装好的mysql在进入mysql工具时,总是有错误提示: # mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 使用网上介绍的方法修改root用户的密码: # mysqladmin -uroot -p password 'newpassword' Enter password: m

  • php运行提示Can't connect to MySQL server on 'localhost'的解决方法

    错误编号:2003 问题分析: 无法连接到 MySQL 服务器,可能的情况为: 1.MySQL 服务没有启动,一般是在异常的情况下 MySQL 无法启动导致的,比如无可用的磁盘空间,my.ini 里 MySQL 的 basedir 路径设置错误等: 2.MySQL 服务器资源紧张,导致无法连接. 解决方法: 1.如果你是虚拟主机用户(购买的空间),则联系空间商检查 MySQL 是否正常启动,并确认 MySQL 的配置信息(是否为 localhost): 2.如果你是独立主机用户(拥有管理主机权限

  • mysql Access denied for user ‘root’@’localhost’ (using password: YES)解决方法

    今天在启动mysql时出现以下问题: [root@www ~]# mysql -u root -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 网上的答案是各种各样的,最终解决问题的方法总结为以下,好多都是没有设置初始密码造成此问题的. 解决方法如下: [root@www ~]# service mysqld stop #先关闭mysql服务

  • Can't connect to MySQL server on 'localhost' (10048)问题解决方法

    解决Can't connect to MySQL server on 'localhost' (10048), 一般见于使用mysql的windows 2003服务器. 错误的出现的原因: 应用程序需要快速释放和创建新连接, 但是由于 TIME_WAIT 中存在的连接超过默认值,导致较低吞吐量. 解决方案: 和本错误密切相关的两个windows的注册表项:TcpTimedWaitDelay和MaxUserPort的值. TcpTimedWaitDelay 确定 TCP/IP 可释放已关闭连接并重

  • IPv6设置后如何解决MySQL无法连接localhost的问题

    使用phpmyadmin或者navicat链接数据库时提示[客户端软件无法连接localhost] 经检查发现是IPV6地址监听了3306端口,而客户端软件不支持IPV6. 新开的系统或者配置过IPV6的操作系统,然后手动安装的MYSQL数据库或者护卫神安装的数据库会出现此问题,平常使用的破解版的一键包不会出现这个问提. 一般手动安装的数据库中没有bind-address = 0.0.0.0这个参数,护卫神的数据库中有这个函数,但是注释的!只需要添加或者去掉这个注释后,重启数据库即可! 然后使用

  • Can't connect to MySQL server on localhost (10061)解决方法

    首先检查MySQL 服务没有启动>如果没有启动,则要启动这个服务. 昨天,重起服务器后出现MySQL 'localhost' (10061)错误,开始以为是因为数据库链接打开过多,数据库资源耗尽的缘故,但是重启服务器以后,仍旧出现问题,于是在网上查找解决方法.大体如下: 解决办法: 第一步 删除c:\windows\下面的my.ini 第二步 打开c:\mysql\bin\winmysqladmin.exe 输入用户名 和密码 第三步 在dos下 输入 mysqld-nt -remove 删除服

  • php mysql localhost,127.0.0.1和ip区别

    一家之言: localhost与127.0.0.1的区别 localhost与127.0.0.1的区别是什么?相信有人会说是本地ip,曾有人说,用127.0.0.1比localhost好,可以减少一次解析.看来这个入门问题还有人不清楚,其实这两者是有区别的. no1: localhost也叫local ,正确的解释是:本地服务器127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器) no2: localhot(local)是不经网卡传输!这点很重要,它不受网络防火墙和网卡相

  • Mac os 解决无法使用localhost连接mysql问题

    今天在mac上搭建好了php的环境,把先前在window.linux下运行良好的程序放在mac上,居然出现访问不了数据库,数据库连接的host用的是localhost,可以确认数据库配置是正确的,因为在java中使用localhost访问正常,另外通过命令行工具也能正常访问.当把localhost换成127.0.0.1或者本机的IP时,居然正常了.以前一直认为localhost与127.0.0.1是一回事,现在事实证明它们其中还是有区别的. 在网上搜索了一下它们的区别,有人已经说的很明白了,具体

  • mysql error 1130 hy000:Host'localhost'解决方案

    ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to this MySQL server www.jb51.net 出现原因: mysql只有一个root用户,修改root密码后选了MD5,提交后,重新 登陆出现"Host 'localhost' is not allowed to connect to this MySQL server..." 尝试另一个mysql库中的user表,覆盖,不行,估计是版本不

  • MySQL 可以用localhost 连接,但不能用IP连接的问题解决方法

    MySQL localhost 连接,但不能用IP连接问题解决方案 主要涉及到MySQL 可以用localhost 连接,但不能用IP连接的问题 方面的内容,对于MySQL 可以用localhost 连接,但不能用IP连接的问题 1.打开cmd窗口,进入MySQL安装的bin目录 2.执行命令登录数据库,之后会出现一行要你输入密码的 mysql -u root -p 3.执行以下命令分配新用户: grant all privileges on *.* to 'root'@'%' identifi

  • mysql_connect localhost和127.0.0.1的区别(网络层阐述)

    connects.php 复制代码 代码如下: mysql_connect('127.0.0.1','root','zzzizzz1'); mysql_connect('localhost','root','zzzizzz1'); 使用strace获取系统调用: 复制代码 代码如下: strace php connects.php 2>&1 | grep connect #127.0.0.1 -> internet socket connect(3, {sa_family=AF_INE

随机推荐