我尝试将一个已有 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