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

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

编辑3:感谢大家的帮助。很抱歉浪费了大家的时间,但似乎只需简单重启一下就可以解决问题。我应该更清楚,但我只是假设“重启”解决方案主要只适用于 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)

为了验证 mysql 服务器是否正在运行,我尝试了这个,它似乎确实正在运行,并且也使用了正确的套接字:

$ ps aux | grep mysql
root 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
root 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 中的活动网络服务时,我确实看到了端口 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 ..

答案1

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

mysql -h localhost

或者使用用户名/密码:

mysql -h localhost -u root -p

两种方法都可能有效,具体取决于用户的设置方式。如果出现此错误,则意味着 mysql 命令至少正在与服务器通信:

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

答案2

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

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

如果不是这样,您可以告诉服务器将其套接字文件写入客户端寻找的位置。在 my.cnf 的“[mysqld]”部分中,更改或添加:

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

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

答案3

我以前遇到过这样的问题,通常都是因为套接字文件不能被 mysql 用户写入/读取。您可以 ls -al /var/run/mysqld/ 目录并检查 mysqld.sock 访问权限。

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

chmod 755 /var/run/mysqld/

进而

/etc/init.d/mysql 重启

它应该可以解决你的问题。

[编辑2] 您能否检查 my.cnf,特别是套接字路径和绑定地址并报告。绑定地址应该是 127.0.0.1,套接字路径应该相同。

答案4

如果是 OpenSuse 或 SLES,我敢肯定是 AppArmor 导致了这个问题。进入 yast 并禁用它。

相关内容