我的 netstat 显示有超过 2,000 个 mysql 连接处于 TIME_WAIT 状态,似乎卡住了,不会消失。这种情况已经持续了好几个小时,而且许多连接都来自对我的数据库服务器没有权限的 IP 地址。它似乎挂了,我该如何清除它?这是暴力攻击吗?我的所有用户权限都有特定的主机,我没有使用任何通配符。
以下是 netstat 的片段:
tcp 0 0 server:mysql static.98.17.76.1:45222 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:34341 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:51888 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:54459 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:49599 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:50751 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:50731 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:54658 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:58974 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:33800 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:59840 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:53495 TIME_WAIT
tcp 0 0 server:mysql static.98.17.76.1:51561 TIME_WAIT
另外,mysql 中的 PROCESSLIST 不显示这些连接,因此我假设它们会立即被删除,但不确定为什么它们不会消失。这会导致 mysql 的最大连接数出现问题吗?
答案1
如果您在状态netstat
输出中发现一些连接TIME_WAIT
,这可能是正常的。当您有太多短暂的连接时,您可能会得到太多这样的连接。
我甚至不需要提供任何用户名、密码或数据库名称就获得了其中一些。只需输入:
mysql -h your_server_ip
ERROR 1045 (28000): Access denied for user 'khaled'@'your_pc_ip' (using password: NO)
您将获得一个处于以下TIME_WAIT
状态的连接:
sudo netstat -anp | grep 3306
tcp 0 0 server_ip:3306 your_pc_ip:50464 TIME_WAIT -
但是,建议拒绝来自此 IP 的访问,特别是当您不认为此 IP 是合法客户端时。像这样的简单 iptables 规则可以拒绝来自此 IP 的进一步请求:
sudo iptables -A INPUT -s bad_ip -p tcp --dport 3306 -j DROP
您可能需要根据是否有其他规则-A
进行更改。-I