【问题标题】:Error "mysqli::real_connect(): (HY000/2002): Only ... permitted."错误“mysqli::real_connect(): (HY000/2002): Only ... allowed.”
【发布时间】:2018-06-11 03:06:41
【问题描述】:

错误:

mysqli_real_connect(): (HY000/2002): 每个socket只使用一次 地址(协议/网络地址/端口)通常是允许的。

但是,我似乎有足够的端口

详情:

我有一个MySQL 服务器已经运行了几个月没有问题。我正在运行 Windows 10、PHP 7.0 和 MySQL 5.7。这是一个繁忙的服务器,每小时处理大量事务。

大约一个星期以来,我收到了过多的:

mysqli_real_connect(): (HY000/2002): 每个socket只使用一次 地址(协议/网络地址/端口)通常是允许的。

我已经尝试了常见的建议,这些建议在其他机器上对我有用。

TcpTimedWaitDelay = 30 and MaxUserPort = 65534

我还添加了

TcpNumConnections = 16777214 and TcpMaxDataRetransmissions = 5.

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

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

【问题讨论】:

  • 更新:通过更积极地重用数据库连接和合并查询,我能够显着减少问题。但是,我仍然不知道为什么我会在明显充足的可用 TCP 端口上达到极限。

标签: php mysql mysqli


【解决方案1】:

所以这看起来是a windows issue 而不是 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:确认没有重复服务

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

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

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

【讨论】:

    猜你喜欢
    • 2016-03-12
    • 2021-01-19
    • 2015-12-31
    • 1970-01-01
    • 2020-04-15
    • 2019-07-29
    • 2020-10-25
    • 2018-11-25
    • 1970-01-01
    相关资源
    最近更新 更多