我已经使用以下方式配置邮件服务器dovecot+postfix+mysql它在服务器(Ubuntu Server)上运行良好。但上周它停止正常工作。它不发送电子邮件。当我尝试连接时,telnet localhost smtp
我成功连接,但当我连接并按下 Enter 时,它挂起,什么也没发生。mail from:<[email protected]>
审查/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
,但它说warning: connect to mysql server 127.0.0.1: Can't connect to MySQL server on '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
答案1
这看起来很愚蠢,但我已经解决了这个问题。我没有注意到系统管理员以某种方式在防火墙上阻止了所有主机的 3306 端口,因此我无法连接到 mysql。删除该限制后,我能够毫无问题地连接到 mysql。感谢您的建议和帮助。
答案2
我遇到了类似的问题。将“hosts = localhost”更改为“hosts = 127.0.0.1”,并将 bind-address 设置为相同的地址,这个问题就解决了(出于某种原因,bind-address 设置为 0.0.0.0)
答案3
您是否尝试过连接到 Mysql 服务器?
mysql -u username -p
另外,您可以尝试将 /etc/mysql/my.cnf 中的监听地址更改为 127.0.0.1,然后重新启动 MySQL
# /etc/mysql/my.cnf
bind-address = 127.0.0.1
答案4
最终对我有帮助的是清除(而不是删除!)所有与 mysql 相关的 apt-get 包,除了libmysqlclient16
处于卸载状态的包(不确定那是什么)。
因此,只需这样做:
dpkg --get-selections | grep mysql
进而:
sudo apt-get purge <package_name>
从公共端开始,然后到客户端,再到服务器。