MySQL停止接受通过3306的连接,仍然在本地主机上工作

我有一个MySQL数据库,完全停止从我的Web服务器接受连接。 所以我SSH到服务器,并开始检查其重要性。 硬盘有足够的空间,有足够的可用内存和交换空间。 没有什么东西在吃掉CPU(接近100%闲置)。 我甚至在本地连接到MySQL,并运行一些查询没有任何问题。 但SHOW PROCESSLIST只显示我自己的连接,没有其他人。

最糟糕的是,在MySQL日志中,即使远程服务器不可用也没有错误发生。

在Web服务器上,我收到一个错误,提示“在查询过程中丢失了与MySQL服务器的连接”,此时无法启动,随后出现一堆“MySQL服务器已经消失”的错误。

在服务器上只有一个接受networking连接的应用程序,而且我杀了那个(如果它拿着太多打开的连接或者什么的),但是没有帮助。

最后我刚刚重新启动了MySQL进程,并且一切都是(现在)再次运行。

我还应该在这些情况下检查什么? 任何想法可能是什么问题? 我怎么能证实这个问题呢?

正如上面的回复一样,validation阻止3306的iptables没有变化。另外,确保你的/etc/my.cnf没有被覆盖,可能是通过分发包更新。 你不应该在[mysqld]下看到skip-networking指令

您应该使用lsof或netstat来检查进程是否在正确的接口(仅绑定到127.0.0.1或绑定到主机IP或*)的端口3306上进行侦听。 您还应该检查该进程已打开的文件数量(您可能会遇到ulimit)。 你也应该确保没有任何改变你的iptables规则,导致它阻止(虽然除非你使用一些高级模块重新起草没有帮助)。 还要确保你没有使用可能会更新你的tcp包装规则的东西,比如拒绝主机(检查/etc/hosts.* – 虽然再次,这不可能通过重新启动来修复)。 下一次发生这种情况时,在您的myswl服务器和应用程序服务器上启动wireshark并在端口3306上进行筛选,同时尝试通过networking连接到mysql。