最近幾天,學校的MySQL數據庫總是出現許多死連接的情況,主要表現為有過多的Sleep連接,並且Time時間很長,占滿了所有的可用連接數,以至於其它用戶無法再連接數據庫。我開始考慮調節MySQL數據庫參數,但是改了許多參數仍然沒有解決這個問題。於是想了一個比較狠的辦法,寫一個PHP腳本,每2分鐘執行一次,發現死連接(超過120秒)就Kill掉,這樣再也不會讓某些程序搞死數據庫服務器了,下面是Kill死連接的小程序:
下載:
kill-MySQL-sleep-proc.PHP
define('MAX_SLEEP_TIME',120);
$hostname="localhost";
$username="root";
$password="passWord";
$connect=MySQL_connect($hostname,$username,$passWord);
$result=MySQL_query("SHOWPROCESSLIST",$connect);
while($proc=MySQL_fetch_assoc($result)){
if($proc["Command"]=="Sleep"&&$proc["Time"]>MAX_SLEEP_TIME){
@MySQL_query("KILL".$proc["Id"],$connect);
}
}
MySQL_close($connect);
?>
將它當中的$passWord改成你實際的數據庫密碼,死連接的時間也可以修改。然後加入計劃任務就可以了。比如用crontab-e命令加入:
*/2****php/usr/local/sbin/kill-MySQL-sleep-proc.PHP
就可以每隔2分鐘檢查並清除一次數據庫中的死連接了。