Mysql
來自外部主機的 mysql 上的 TIME_WAIT 連接太多
我的 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 的最大連接數出現任何問題嗎?
如果
netstat
在 state 的 output 中發現一些連接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