技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

Can't connect to local MySQL server through socket

作者:admin    时间:2013-12-17 9:40:46    浏览:

今天调试网页的时候,出现了一个错误,提示Can’t connect to local MySQL server through socket...,从字面意思来看,是不能通过socket连接本地MySQL服务器,难道MySQL服务器哪里出问题了?

检查一下MySQL有没有启动,看到已经启动了的。为了保险,我又重新启动了一次。不过还是问题再现。

我接着看看其他程序是否有问题,结果让我有点不解,因为我的其他程序是正常的。难道是今天调试的网页与其他程序的MySQL连接字符串不同?

我接着认真检查一下两者之间的差异,结果发现servername一个使用127.0.0.1,另一个使用localhost。127.0.0.1连接正常,而localhost连接报错。问题是不是就出在这里呢?

我于是把localhost改为127.0.0.1试试,竟然能连接成功了!

不过我很诧异,使用localhost与127.0.0.1本地连接有什么不同?我一直没有注意过这个问题,所以本地服务器都是随意写的localhost或127.0.0.1。

localhost与127.0.0.1连接MySQL时的一些差异

查了下资料,发现localhost与127.0.0.1在连接MySQL时是有一些差异的。

我们连接数据库时,localhost与127.0.0.1都是不加思考的使用的,没有去想过两者有什么不同。其实他们连接数据库时使用的协议是不同的,具体来说,127.0.0.1 使用TCP/IP连接,而localhost使用Unix socket连接。

看看下面的实验证明:

shell> mysql -h 127.0.0.1
mysql> status;
Current user: root@127.0.0.1
Connection: 127.0.0.1 via TCP/IP

shell> mysql -h localhost
mysql> status;
Current user: root@localhost
Connection: Localhost via UNIX socket

不过,这只是linux套接字网络的特性,win平台不会有这个问题。也就是说,在win平台里,可以用localhost或127.0.0.1连接MySQL数据库,但在linux里不可以。

要使在linux也可以用localhost连接MySQL,解决方法是在my.cnf的[mysql]区段里添加如下代码:

protocol=tcp

保存重启MySQL即可。

相关资料

Can't connect to [local] MySQL server错误

一个MySQL客户可以两种不同的方式连接mysqld服务器:Unix套接字或TCP/IP。

Unix套接字是通过在文件系统中的一个文件(预设“/tmp/mysqld.sock” )进行连接;TCP/IP是通过一个端口号连接。Unix套接字比TCP/IP更快,但是只有用在连接同一台计算机上的服务器。如果你不指定主机名或如果你指定特殊的主机名localhost,使用Unix套接字。

错误(2002)Can't connect to ...通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时,你正在使用一个错误的套接字文件或TCP/IP端口。

先检查(使用ps )在你的服务器上是否有一个名为mysqld的进程启动!如果没有任何mysqld程序,你应该启动一个。

如果一个mysqld程序正在运行,你可以通过尝试这些不同的连接来检查服务器(当然,端口号和套接字路径名可能在你的安装中是不同的):

shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --socket=/tmp/mysql.sock version

注意hostname命令使用反引号“`”而非正引号“'”﹔这些导致hostname输出(即,当前主机名)被代替进mysqladmin命令中。

这是可能造成Can't connect to local MySQL server错误的一些原因

1、mysqld没有运行。

2、你正在使用MIT-pthreads的一个系统上运行。

如果正在运行在一个没有原生执行绪的系统上,mysqld使用MIT-pthreads软件包。然而,MIT-pthreads不支援Unix套接字,因此当与服务器连接时,在这样一个系统上,你总是必须明确地指定主机名。试试使用这个命令检查到服务器的连接:

shell> mysqladmin -h `hostname` version

3、某人删除了mysqld使用的Unix套接字(预设“/tmp/mysqld.sock” )。

你可能有一个cron任务删除了MySQL套接字(例如,一个把旧文件从“/tmp”目录中删除的任务)。你总是可以运行mysqladmin version并且检查mysqladmin正在试图使用的套接字确实存在。在这种情况下,修复方法是删除cron任务而不删除“mysqld.sock 或将套接字放在其他地方。你能用这个命令在MySQL配置时指定一个不同的套接字地点:

shell> ./configure --with-unix-socket-path=/path/to/socket

你也可以使用--socket=/path/to/socket选项启动safe_mysqld和在启动你的MySQL客户前设置环境变数MYSQL_UNIX_PORT为套接字路径名。你可用--socket=/path/to/socket选项启动mysqld服务器。如果你改变了服务器的套接字路径名,你也必须通知MySQL客户关于新路径的情况。你可以通过设置环境变数MYSQL_UNIX_PORT为套接字路径名或由提供套接字路径名作为客户的参数做到。你可用这个命令测试套接字:

shell> mysqladmin --socket=/path/to/socket version

4、你正在使用Linux和执行绪已经死了(核心倾倒了)。

在这种情况中,你必须杀死其它mysqld执行绪(例如在启动一个新的MySQL服务器之前,可以用mysql_zap脚本)。

Can't connect to MySQL server on some_hostname错误

如果你得到错误Can't connect to MySQL server on some_hostname,你可以尝试下列步骤找出问题是什么:

1、通过执行:

telnet your-host-name tcp-ip-port-number

并且按几次回车来检查服务器是否正常运行。如果有一个MySQL运行在这个端口上,你应该得到一个包含正在运行的MySQL服务器的版本号的应答。如果你得到类似于telnet: Unable to connect to remote host: Connection refused的一个错误,那么没有服务器在使用的端口上运行。

2、尝试连接本地机器上的mysqld背景执行程式,并用mysqladmin variables检查mysqld被配置使用的TCP/IP端口(变数port )。

3、检查你的mysqld服务器没有用--skip-networking选项启动。

您可能对如下文章也感兴趣

localhost不能访问127.0.0.1可以访问的原因及解决方法

标签: 服务器  
x
  • 站长推荐
/* 左侧显示文章内容目录 */