没有这样的文件或目录 - /var/run/mysqld/mysqld.sock

没有这样的文件或目录 - /var/run/mysqld/mysqld.sock

我尝试将一个已有 5 年历史的 ruby​​ on rails 应用程序迁移到装有 Ubuntu 8.04、Apache 2 和 MySQL 5 的新服务器上。

应用程序运行失败。当我查看错误日志时,我注意到

Errno::ENOENT (No such file or directory - /var/run/mysqld/mysqld.sock)

我查看了我的新服务器,但找不到 mysqld.sock 文件。我该如何解决这个问题?

答案1

最有可能是您的 MySQL 服务未运行。错误中的套接字是 Ubuntu 中 MySQL 套接字的默认位置,因此除非您从源代码编译 MySQL 或更改 MySQL 配置,否则它应该在那里。

尝试启动MySQL:

sudo /etc/init.d/mysql start

答案2

您可能需要检查:a) mysql 是否正在运行 b) 套接字是否已启用 c) 默认套接字位置是否可用

因此,您可以这样做:a)检查 mysql 是否正在运行

sudo ps -ef | grep -c mysql

如果计数返回 0,则 mysql 未运行。此检查还将发现 mysql 是否已使用 safe_mysqld 启动。

如果您认为它没有运行,那么您可以发出标准的 init 启动脚本。

sudo /etc/init.d/mysql start

如果您再次检查,答案是 0,那么 mysql 由于某种原因没有启动,您有更大的问题。一个好的开始是使用最基本的二进制调用从命令行启动 mysqld,如果出现问题,应该将其推送到控制台上的标准错误。

b)如果服务器正在运行,您可以通过检查 my.cnf 配置文件或使用 netstat 来检查它是否启用了套接字

sudo netstat -nalp | grep mysql

这应该让你知道套接字是否可用 -> 它们可以处于 CONNECTED 或 LISTENING 状态。如果没有可用的 LISTENING 套接字,那么可能是你的服务器太忙了,无法与你通信。但一般来说,如果服务器正在运行,你应该至少有一个 LISTENING 套接字。

c) 您应该检查您的 my.cnf 文件以查看套接字位置在哪里 - 以防它与默认值不匹配;以及它是否没有被注释掉。

    [mysqld_safe]
socket          = /var/run/mysqld/mysqld.sock

或者

     [client]
socket          = /var/run/mysqld/mysqld.sock

相关内容