MySQL服务器套接字'/tmp/mysql.sock'连接问题

时间:2013-12-08 07:44:16

标签: mysql linux sockets command-line homebrew

我是一个完全的初学者,所以请原谅我,但我非常感谢我逐步了解如何解决下面的文字和详细问题(例如,指示我“{{3 “没有帮助,因为它没有解释如何验证文件是否存在)。我的操作系统是Mac OS X版本10.8.5。我正在尝试通过Homebrew安装MySQL,这是我所采用的在线课程所要求的。

要卸载我之前在计算机上安装的MySQL,我在终端中输入了以下命令:

$ brew unlink mysql
$ brew uninstall mysql

要使用Homebrew安装MySQL,我然后在终端中输入以下命令:

$ brew install mysql

安装成功,但导致以下含糊不清的“警告”:

==> Caveats
A "/etc/my.cnf" from another install may interfere with a Homebrew-built
server starting up correctly.

我决定忽略这个警告并输入以下命令来启动mysql服务器:

$ mysql.server start

大!输入此命令在终端中生成以下消息:

Starting MySQL
 SUCCESS! 

我接下来尝试通过输入以下命令连接到我的mysql服务器:

$ mysql -uroot

当我输入上述命令时,终端产生了以下错误消息:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

如何消除此错误消息并连接到我的MySQL服务器?我花了几个小时来解决这个问题而没有运气。正如在stackoverflow Verify that the /tmp/mysql.sock file exists的最高答案中所建议的,为了查看mysql是否正常启动,我输入了以下命令:

$ /usr/local/bin/safe_mysqld

这导致了一条消息,指出

  

没有这样的文件或目录

存在,这使我相信这实际上不是命令而是目录路径。所以,我的问题是,如何在不获取上面粘贴的错误消息的情况下连接到mysql?非常感谢您的建议,如果我需要澄清这个问题中的任何内容,请告诉我。

2 个答案:

答案 0 :(得分:2)

您可以通过运行以下命令找到safe_mysqld可执行文件:

which safe_mysqld
whereis safe_mysqld

您忽略的消息可能很重要。你应该看看/etc/my.cnf文件。 如果你无法修复它,你应该删除它(或者将它备份到某处,然后删除),然后尝试重新安装mysql。

此外你应该尝试mysql -h 127.0.0.1 -u root - 这样客户端将尝试通过TCP / IP环回连接,而不是套接字文件。

你应该看看的另一个文件是〜/ .my.cnf。

在配置文件中,尝试查找mysql.cock。它可以在/etc/my.cnf和〜/ .my.cnf中进行不同的配置。

我建议你阅读mysql和my.cnf的手册页,其中包含在你的系统上正确配置mysql所需的信息。

您应该检查的另一件事是mysqld.sock文件的已配置位置。 / tmp目录是不常见的位置。它通常位于/ var / run /

中的某个位置

答案 1 :(得分:1)

如果mysqld已正确启动,mysqld会打开unix域套接字文件,您可以从/proc/net/unix中找出它(outout已经过清理)

[xxxxxx@host fd]$ cat /proc/net/unix
Num       RefCount Protocol Flags    Type St Inode Path
fffffffffffffff0: 11111111 11111111 12311111 1231 01 1234508758 /path/to/socket/mysql.sock
....
fffffffffffffff0: 11111111 11111111 11111111 1232 01 1234513046
fffffffffffffff0: 11111111 11111111 11111111 1232 01 1234513025
fffffffffffffff0: 11111111 11111111 11111111 1232 01 1234568184
fffffffffffffff0: 11111111 11111111 11111111 1232 01 1234543175
fffffffffffffff0: 11111111 11111111 11111111 1232 01 1234582424
fffffffffffffff0: 11111111 11111111 11111111 1232 01 1234550606
fffffffffffffff0: 11111232 11111111 11111111 1232 01 12345

如果有很多mysqld实例,输出可能有很多套接字文件。在这种情况下,如果你知道mysqld pid(你可以从ps -ef | grep mysqld获得pid)

[xxxxxx@hostname fd]$ ls -l /proc/[pid]/fd | grep socket
lrwx------ 1 user user 64 01월 30 03:18 12 -> socket:[1234508758]
lrwx------ 1 user user 64 01월 30 03:18 13 -> socket:[1211111111]
lrwx------ 1 user user 64 01월 30 03:18 42 -> socket:[3333333333]

如果是我的情况,mysqld有三个套接字,其中一个(1234508758)用于mysql.sock

更新

抱歉,我以为您使用的是* NIX(感谢@Michael),不确定Mac支持/proc/net/unix。但似乎Mac有lsof。我想知道以下命令是否适合你。

$ /usr/sbin/lsof | grep mysqld | grep sock
mysqld     1111 username   ....  /path/to/mysql.sock
相关问题