无法通过套接字'/var/run/mysqld/mysqld.sock'(2)连接到本地MySQL服务器。

我使用dovecot+postfix+mysql配置了邮件服务器,它在服务器(Ubuntu Server)上运行良好。但是在上周,它停止正常工作。它无法发送电子邮件。当我尝试telnet localhost smtp时,连接成功,但当我执行mail from:<steve@example.com>并按Enter键时,它卡住了,没有任何反应。
通过查看/var/log/mail.log文件,我发现问题可能(99%)出在 postfix 尝试连接到 MySQL 服务器时。如果您查看下面给出的日志文件,您会看到它说Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Nov 14 21:54:36 ns1 dovecot: dovecot: Killed with signal 15 (by pid=7731 uid=0 code=kill)
Nov 14 21:54:36 ns1 dovecot: Dovecot v1.2.9 starting up (core dumps disabled)
Nov 14 21:54:36 ns1 dovecot: auth-worker(default): mysql: Connected to localhost (mailserver)
Nov 14 21:54:44 ns1 postfix/postfix-script[7753]: refreshing the Postfix mail system
Nov 14 21:54:44 ns1 postfix/master[1670]: reload -- version 2.7.0, configuration /etc/postfix
Nov 14 21:54:52 ns1 postfix/trivial-rewrite[7759]: warning: connect to mysql server localhost: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Nov 14 21:54:52 ns1 postfix/trivial-rewrite[7759]: fatal: mysql:/etc/postfix/mysql-virtual-alias-maps.cf(0,lock|fold_fix): table lookup problem
Nov 14 21:54:53 ns1 postfix/master[1670]: warning: process /usr/lib/postfix/trivial-rewrite pid 7759 exit status 1
Nov 14 21:54:53 ns1 postfix/cleanup[7397]: warning: problem talking to service rewrite: Connection reset by peer
Nov 14 21:54:53 ns1 postfix/master[1670]: warning: /usr/lib/postfix/trivial-rewrite: bad command startup -- throttling
Nov 14 21:54:53 ns1 postfix/smtpd[7071]: warning: problem talking to service rewrite: Success

我尝试了netstat -ln | grep mysql,它返回:

unix 2 [ ACC ] STREAM LISTENING 5817 /var/run/mysqld/mysqld.sock

/etc/postfix/mysql-virtual-alias-maps.cf文件的内容在这里:

user = stevejobs
password = apple
hosts = localhost
dbname = mailserver
query = SELECT destination FROM virtual_aliases WHERE source='%s'

这里我试图更改hosts = 127.0.0.1,但它显示警告:连接到MySQL服务器127.0.0.1失败:无法连接到MySQL服务器'127.0.0.1'(110)

所以,我迷失了方向,不知道还需要在哪里进行更改以解决问题。非常感谢任何帮助。

谢谢。

编辑1

当我执行netstat -na时,我发现mysql既没有绑定到localhost也没有绑定到127.0.0.1。这也可能是问题吗?

bakhtiyor@ns1:~$ netstat -na | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN   
5个回答

看起来很愚蠢,但我已经解决了这个问题。我没有注意到系统管理员在防火墙上以某种方式封锁了所有主机的3306端口,因此我无法连接到mysql。在解除限制后,我能够毫无问题地连接到mysql。感谢您的建议和帮助。

1如何移除限制? - Green
我想通过TCP连接,而不是通过套接字。我该怎么做?谢谢。 - krisanalfa
嗨 @Green,你有没有办法解决如何去除限制或者如何查找端口3306是否受到限制的问题? - Sushivam

你有尝试连接到Mysql服务器吗?
mysql -u username -p

另外,你可以尝试在 /etc/mysql/my.cnf 中将监听地址更改为 127.0.0.1,并重新启动 MySQL。
# /etc/mysql/my.cnf
bind-address = 127.0.0.1

我按照你说的做了,但没有任何结果。 - Bakhtiyor
我是指我可以使用 mysql -u 用户名 -p 连接到 MySQL。 - Bakhtiyor
应该是"my.cnf"。 - jnunn

我曾经遇到过类似的问题。将"hosts = localhost"更改为"hosts = 127.0.0.1",并将bind-address设置为相同的地址,这样问题就解决了(bind-address之前被设置为0.0.0.0,原因不明)。

我能够将bind-address设置为0.0.0.0(这对于我与Galera进行的群集是必要的),只需将"host=127.0.0.1:3306"更改为使用TCP。我决定采用这种方式,而不是像其他人那样将套接字绑定到Postfix的chroot中。 - Sean Reifschneider

我刚在公司的一台电脑上也遇到了这个错误。
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

我在尝试通过ssh运行X窗口程序时,也经常遇到这个错误。
GConf Error: Failed to contact configuration server; 
some possible causes are that you need to enable TCP/IP networking for ORBit,
or you have stale NFS locks due to a system crash

原来我的根文件系统已经完全填满了,没有可用的磁盘空间,因此我的系统无法写入许多必要的文件。我遇到了各种各样的错误,与许多不同的程序有关。(无法通过GDM登录,GDM壁纸变黑,gconf锁定文件错误等等...)
我所做的只是输入这个简单的命令,以清除根分区中不再需要的超过400 MB的文件。
sudo apt-get autoremove

那给了我的根文件系统所需的空间。现在一切都运行得很好。猜猜一个10 GB的根目录不足以处理超过两年的Ubuntu更新。
如果有人在意的话,这个系统从Ubuntu 10.04发布以来就一直在运行。系统至少每周更新一次。今天是2012年9月6日,所以已经有将近2年半的更新了。

当你的问题是空间时,我也建议访问http://askubuntu.com/questions/17432/is-it-safe-to-delete-the-old-kernels-from-menu-lst。 - ecoologic
+1 为指出空间问题而感谢,这解决了我的问题。 - yuval

最终帮助我解决问题的是清除(而不是移除)除了libmysqlclient16之外的所有与mysql相关的apt-get软件包,而libmysqlclient16则处于de-install状态(不确定这是什么意思)。
所以,只需执行以下操作:
dpkg --get-selections | grep mysql

然后:

sudo apt-get purge <package_name>

从常见的开始,然后转向客户端,最后到服务器。

我不认为这个答案有帮助。问题是被阻止的3306端口,而不是损坏的MySQL软件包。 - Nephente
此命令将删除所有依赖于 libmysqlclientXX 的软件包。 - krisanalfa
如何找到被阻止的端口3306? - Sushivam