无法连接到 MySQL 服务器,“未知错误”

无法连接到 MySQL 服务器,“未知错误”

我在 Windows Server 2016 上运行了一系列使用 MySQL 服务器(MariaDB 10.0.27)的服务器程序。起初一切都很好,服务器连接到数据库,客户端可以连接到服务器程序,一切都在预期之内。但是程序运行几个小时后,我突然无法创建任何新的无法再连接到 MySQL 服务器。服务器程序仍在运行,我可以连接到它们,并且它们似乎仍在使用数据库服务器,但是当我尝试自己连接到 MySQL 服务器时,我收到以下错误消息:

ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (10055 "Unknown error")

起初错误消息如下,但搜索后我增加了可用的 TCP 端口数量,因为缺少这些端口据说是导致错误。

(HY000/2002): An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.

我的MaxUserPort注册表设置现在为51024。但是,问题并没有消失,只是错误消息发生了变化。

现在,当我关闭服务器程序时,我可以再次创建新连接,而无需更改正在运行的 MySQL 服务器的任何内容,并且在我重新启动它们之后,我仍然可以创建新连接一段时间。我以为这可能是 MySQL 连接数限制,但该设置目前在 my.ini 中为 1500,并且我在 MySQL 控制台中没有看到任何错误。

max_connections = 1500

此外,我注意到,一旦我无法再创建新连接,我也无法在浏览器中打开任何网站,并出现错误ERR_CONNECTION_FAILED,这让我再次想到了 TCP 端口限制。但当我运行时,netstat我看到的连接数少于 300 个,据我了解,即使使用默认设置,这也应该没问题。我也可以开始一个 Web 服务器,但我无法从同一台机器通过 HTTP 打开它上的任何内容。我从外部访问网络服务器的内容。

我完全不知道发生了什么。有人知道吗?

答案1

问题原来是套接字/句柄耗尽。我首先使用 ProcessExplorer 来监视服务器进程,它们不断创建新句柄(即套接字),大概是尝试连接某个地方。我猜它们没有正确处理这些连接之类的,因为随着时间的推移,这几个进程各自积累了 60k 多个句柄,然后我就无法再创建新连接了。

然后我使用 TCPView 监控服务器的连接,它们不断尝试连接到本地端口上的某个东西,而服务器期望的是 NoSQL 服务器,而我之前并不知道这一点。我一运行该数据库服务器,程序就成功连接到它,并停止在无限循环中创建新的连接。

相关内容