运行mysql客户端时出现问题,无法连接到mysql服务器

编辑3:感谢大家的帮助。 对不起浪费任何人的时间,但似乎是一个简单的重新启动解决它。 我应该知道更好,但我只是假设“重新启动”的解决scheme大多只适用于MS Windows(无罪)。 在我再次提出问题之前,我会牢记这一点。


我使用sudo apt-get install在Ubuntu 8.04上安装了mysql-client-5.0和mysql-server-5.0软件包。

当我尝试运行“mysql”命令时,出现以下错误:

 错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2) 

为了validationmysql服务器是否正在运行,我试过了,它似乎正在运行,也有正确的套接字:

 $ ps aux |  grep mysql
根13388 0.0 0.0 1772 528?  S 06:24 0:00 / bin / sh / usr / bin / mysqld_safe
 mysql 13553 0.0 1.4 127012 15332?  sl 06:25 0:00 / usr / sbin / mysqld --basedir = / usr --datadir = / var / lib / mysql --user = mysql --pid-file = / var / run / mysqld / mysqld.pid --skip-external-locking --port = 3306 --socket = / var / run / mysqld / mysqld.sock
根13555 0.0 0.0 3008 696?  S 06:25 0:00 logger -p daemon.err -t mysqld_safe -i -t mysqld
 ehsanul 16910 0.0 0.0 3092 772 pts / 4 R + 07:17 0:00 grep mysql

所以我不明白为什么我得到一个错误,试图连接到MySQL服务器。 请注意,我对MySQL完全陌生。

编辑:

根据评论的要求,返回错误的确切命令只是“sudo mysql”。
当我检查netstats的活动networking服务,我看到一个条目端口3306与协议:tcp,IP来源:127.0.0.1,状态:LISTEN

编辑2:它看起来像/var/run/mysqld/mysqld.sock套接字不存在(如果我正在解释以下输出):

 $ ls -al / var / run / mysqld /
总计0
 drwxr-xr-x 2 mysql root 40 2009-08-06 06:36
 drwxr-xr-x 20 root root 860 2009-08-06 06:25

如果您通过套接字连接时遇到问题,可以尝试通过tcp连接到您的mysql服务器:

mysql -h localhost 

或使用用户名/密码:

 mysql -h localhost -u root -p 

根据用户的设置,任何一个人都可以工作。 如果你得到这个错误,这意味着mysql命令至less要和服务器通话:

 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 

我遇到了这个问题,假设我使用的客户端软件没有与服务器相同的选项进行编译时,sock文件的位置是错误的。 (在我的情况下,PHP的二进制分布)。

我首先检查一下,确保正在运行的客户端实际上是您认为已经安装的客户端,而不是其他版本。

如果不是这样,你可以告诉服务器把它的套接字文件写在客户端查找的地方。 在my.cnf的“[mysqld]”部分,更改或添加:

 socket=/var/run/mysqld/mysqld.sock 

或者,只需放入一个符号链接。 对于我的PHP问题,因为它在/ tmp中查找它,我有一个在启动时运行的作业来添加符号链接。

过去我遇到过这样的问题,通常归结为mysql用户不能写/读的套接字文件。 你可以在/ var / run / mysqld /目录下查看mysqld.sock的访问权限。

试试:chown mysql:mysql / var / run / mysqld /

chmod 755 / var / run / mysqld /

接着

/etc/init.d/mysql重新启动

它应该解决你的问题。

你可以检查my.cnf,尤其是套接字path和绑定地址,然后回报。 绑定地址应该是127.0.0.1,套接字path应该是相同的。

如果是OpenSuse或SLES,我敢打赌是AppArmor引起了这个问题。 进入yast并禁用它。