关于mysql的一个问题,诚招高手解答!

关于mysql的一个问题,诚招高手解答!

   我执行/usr/local/servers/mysql/bin/mysqladmin version
可系统提示/usr/local/servers/mysql/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
    请问这是什么错误,请告诉我如何解决,谢谢!!!      
我也遇到这样的情况了,在论坛上看到前辈们通过./safe_mysqld -u root &就解决了,但是我的还是不行,同样的错误的提示      
找到mysql.sock文件链接到/tmp目录下就可以了, 或者修改/etc/my.cnf文件,看是否有socket=/path/to/mysql.sock一行,用mysql_config --socket看看mysql.sock的路径,把这行改掉与其保持一致.然后重起mysql.

      
说的容易,如果我的机器上有,我早就拷贝过去了      
如果你成功启动mysqld的话,这个文件是存在的。否则没有。      
因为我的机器出现了这个问题,并且遍寻网络,直到找到MYSQL的老家http://www.mysql.com ,才终于找到答案。我想肯定有许多LINUX新人肯定会遇到和我一样的难题,所以我把MYSQL网站上的解释翻译过来,但愿对大家有些帮助

A.2.3 Can't connect to [local] Mysql server error

在UNIX系统上的MySQL客户程序可以用两种方式连接MySqld server:

一种是Unix sockets, 通过文件系统的一个文件连接(默认是/tmp/mysqld.sock)(chenix的机子上是/var/lib/mysql/mysql.sock);
一种是TCP/IP,通过一个端口号连接。

Unix sockets比TCP/IP要快但只能用于连接在同一台机子上的服务器,只有在你没有一个主机名或你将你的主机名命名为localhost时使用。

如果Mysqld server在Win95/98中运行,你只能用TCP/IP连接。如果是在NT上运行,你也可以用管道连接。管道的名字是MySQL。如果你在连接mysqld时没有给出一个主机名,mysql客户程序会首先尝试连接到这个管道,不行才连接到TCP/IP端口。你可以通过设置主机名为".",在Windows中强制使用管道。

错误2002“can't connect to...”通常表示系统上没有mysql server在运行或者你在使用错误的socket文件或者TCP/IP端口。

先检查(用PS或WINDOWS任务管理器)是否有一个叫做MYSQLD的进程在运行!如果没有,你应该启动一个。

如果一个MYSQLD进程正在运行,你可以通过尝试下面这些不同的连接来检查服务器(当然你设置的端口号和SOCKET路径可能不同):

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

注意用反引号,而不要用引号;这些会输出主机名(就是目前用的主机名)。

下面是出现“can't connect to...”的一些原因:

1,MYSQLD没有运行;
2,你在一个使用MIT-pthreads的系统上运行。如果你在一个没有native threads的系统上运行,mysqld就会使用MIT-pthreads包。但是,所有的MIT-pthreads都不支持UNIX SOCKETS。在一个不支持SOCKETS的系统上,你必须命名一个特别的主机名。用下面的命令检查和MYSQL SERVER的连接:

shell>mysqladmin -h `hostname` version

3,SOCKET文件已经被删除。你可能不小心删除了mysql socket(比如,你删除/tmp下的旧文件)你可以运行mysqladmin version来确信mysqladmin想使用的socket文件确实存在。修改mysqld.sock文件的路径可能会避免这一点。
4,你可能运行mysqld server时选择了 --socket=/path/to/socket 选项。如果你修改了mysqld.sock文件的路径,mysql客户程序就会找不到socket文件。你可以修改socket路径作对客户程序的变量。
5,你在使用linux,一个进程已经死亡。(内核崩溃)。这种情况下,你必须杀死其他的mysqld进程(比如:在你运行一个新的mysqld server前使用mysql_zap脚本)
6,你可能对包含socket文件的目录或socket文件没有读和写的权限。在这种情况下你或者改变目录或socket文件的权限或使用你可以访问的目录重新启动mysqld。

专家建议:
Geoff Kendal说:
有些RPM把mysql.sock放在了/var/lib/mysql/mysql.sock而不是/tmp/mysql.sock。我在几个世纪前就不这么做了。有个小窍门:
"ln -s /var/lib/mysql/mysql.sock /tmp”。

在如何处理mysql server崩溃管理方面做了大量的调查后我建了一个小脚本用来检查是否mysql后台程序在运行并且如果不是将自动重新启动apache。这段脚本现在我的服务器上运行并且非常棒。

#Begin Script
#!/bin/sh
##Stay alive crontab script:
# if test -f "/var/lib/mysql/mysqld.pid"; then
echo "/var/lib/mysql/mysqld.pid" exists
else echo "/var/lib/mysql/mysqld.pid" does not exist
shutdown -r now > /dev/null
fi
exit 0
#End Script

这段脚本我还没试过,今天晚上我回去试试看。      
我的建议:
1. 把mysql.sock属性和其所属目录属性改成777
2. 重新启动mysql; /etc/rc.d/init.d/mysqld restart
3. 重新启动apache(如果有的话)。/etc/rc.d/init.d/httpd restart      
还没试过,不知道能行否,不过谢谢了先