没有这样的文件或目录 – /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) 

我环顾了我的新服务器,但无法find一个mysqld.sock文件。 我该如何解决这个问题?

很有可能你的MySQL服务没有运行。 错误中的套接字是Ubuntu中MySQL套接字的默认位置,所以除非您从源代码编译MySQL或更改MySQLconfiguration,否则应该在那里。

尝试启动MySQL:

 sudo /etc/init.d/mysql start 

您可能需要检查: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.cnfconfiguration文件或使用netstat来检查是否启用了套接字

 sudo netstat -nalp | grep mysql 

这应该让你知道套接字是否可用 – >它们可以处于CONNECTED或LISTENING状态。 如果没有可用的侦听套接字,那么可能是因为你的服务器太忙而不能与你通话。 但是一般来说,如果服务器正在运行,你至less应该有一个LISTENING套接字。

c)你应该检查你的my.cnf文件来查看套接字的位置在哪里 – 如果它不符合默认值; 以及是否没有注释掉。

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

要么

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