错误"mysqli :: real_connect():( HY000/2002):仅......允许."

use*_*661 6 php mysql mysqli phpmyadmin

错误:

mysqli_real_connect():( HY000/2002):通常只允许使用每个套接字地址(协议/网络地址/端口).

但是,看来我有足够的端口.

细节:

我有一台MySQL运行了几个月而没有问题的服务器.我正在运行Windows 10,PHP 7.0和MySQL 5.7.这是一台繁忙的服务器,每小时交易量很大.

现在大约一个星期,我的体积过大:

mysqli_real_connect():( HY000/2002):通常只允许使用每个套接字地址(协议/网络地址/端口).

我尝试了一些共同的建议,这些建议在其他机器上对我有用.

TcpTimedWaitDelay = 30 and MaxUserPort = 65534
Run Code Online (Sandbox Code Playgroud)

我还补充说:

TcpNumConnections = 16777214 and TcpMaxDataRetransmissions = 5.
Run Code Online (Sandbox Code Playgroud)

我可以通过netsh确认最大端口和超时.此外,当我运行netstat/abno时,我一直看到使用的端口少于1000个.但是,我仍然遇到上述错误.所以看起来机器甚至没有使用所有的端口.

在我.ini,我有一个connection limit of 10,000.

Mar*_*ark 1

所以这看起来是一个 Windows 问题,而不是 MySQLi 的问题。(可能是由于最近的 Windows 10 更新) - 不过可能是由于套接字未正确关闭。

修复 1:提供更多可用端口

启动regedit.exe并浏览至: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\MaxUserPort

有一个字符串值,默认设置为 5000 - 这决定了可用端口的最大数量。您可以将其更改为 65534 以内的任何值。

确保重新启动网络服务器(最好是整个计算机)以使更改生效

修复 2:显式指定 localhost IP

任何与 localhost 的连接都应指定为127.0.0.1,而不是localhost

修复 3:确认没有重复的服务

检查以确保您的 Web 服务器没有多个实例正在运行,或者有多个调用来打开与所述服务器的连接 - 因为这会锁定端口。打开services.msc - 如果存在重复的服务,您应该删除一个实例。

修复 4:您是否正确关闭连接?

如果可以的话,请发布您的代码,以便我们更好地了解发生的情况 - 以及连接是否正确关闭,从而释放套接字/端口