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

时间:2017-12-31 15:07:26

标签: 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

我还添加了

TcpNumConnections = 16777214 and TcpMaxDataRetransmissions = 5.

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

在我的.ini中,我有connection limit of 10,000

1 个答案:

答案 0 :(得分:0)

因此,这似乎是a windows issue,而不是MySQLi的问题。 (可能是由于最近的Windows 10更新)-尽管可能是由于套接字未正确关闭。

修复1:使更多端口可用

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

有一个字符串值,默认情况下设置为5000-这确定了可用端口的最大数量。您最多可以将其更改为65534。

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

修复2:明确指定本地主机IP

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

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

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

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

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