我的邮件服务器 (Ubuntu 10.04) 使用 mysql 作为虚拟域和虚拟用户。出于某种原因,mysqld 已开始拒绝来自 localhost 的连接。我在邮件服务器日志中看到以下内容:
Oct 6 00:31:14 apollo postfix/trivial-rewrite[16888]: fatal:
proxy:mysql:/etc/postfix/mysql-virtual_domains.cf(0,lock|fold_fix): table
lookup problem
和:
Oct 7 13:39:15 apollo postfix/proxymap[25839]: warning: connect to mysql server
127.0.0.1: Lost connection to MySQL server at 'reading initial communication
packet', system error: 0
我还在 auth.log 中收到以下内容:
Oct 6 22:33:31 apollo mysqld[31775]: refused connect from 127.0.0.1
Telnet 到本地端口:
root@apollo:/var/log/mysql# telnet localhost 3306
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.
root@apollo:/var/log/mysql#
我不确定为什么会发生这种情况,但那天早些时候 RAID 1 对中发生了磁盘故障。因此,我的配置文件或类似的东西可能已损坏。但邮件在驱动器事件发生后至少一个小时内仍在运行,所以谁知道确切原因呢?
phpmyadmin 运行良好,并且数据库本身看起来完好无损。
我认为/相信 selinux 和 iptables 已被禁用且未运行。那么...为什么 mysqld 拒绝来自 localhost 的连接?我应该检查什么?如果 .conf 文件或二进制文件损坏,哪些进程可能会导致这种情况?哪些其他日志文件可能包含线索?我在 /etc/mysql/my.cnf 中启用了“常规日志记录”,但在那里没有得到有趣或有用的条目。
谢谢,m00tpoint
答案1
要开始解决您的问题,请尝试netstat
以下命令:
# netstat -anp | egrep '3306.*LISTEN'
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4118/mysqld
#
或尝试这个:
mysql --socket=/var/lib/mysql/mysql.sock
/var/lib/mysql/mysql.sock
用适合您的文件的路径替换mysql.sock
。
另外,既然你说你正在phpMyAdmin
运行,为什么不看看config.inc.php
它是如何连接到你的呢mysqld
?
可能你的绑定mysqld
是在特定的 IP/接口上,而不是全部。
答案2
您检查过实际的 mysql 日志文件吗?
/var/lib/mysql/"your-server-name".err
另外也许您达到了 max_connections 的限制。运行此命令进行检查:
show variables like 'max_connections';
show status like 'Max_used_connections';
如果 max_connections 和 Max_used_connections 相等,则需要提高 max_connections
答案3
尽管localhost
通常相当于127.0.0.1
,但就 MySQL 而言,两者是不同的实体。
您包含的 Telnet 日志部分显示 Telnet 首先尝试通过名称连接,但失败了。然后它尝试通过 IP 地址连接并成功。尽管 Telnet 随后报告它已连接到 的 MySQL localhost
,但 MySQL 用户帐户显然是为 设置的127.0.0.1
。我怀疑这两个身份已在某些配置文件中更改。我不了解 postfix,但我建议您检查其配置。如果失败,您可以为 增加一个 MySQL 用户帐户27.0.0.1
。