2012-11-27 38 views

回答

2

解決的辦法是寫一個存儲過程,殺死上面的一段時間內所有的連接來執行(KILL)連接:

DELIMITER // 
DROP PROCEDURE IF EXISTS ClearDB// 
CREATE PROCEDURE ClearDB() 
BEGIN 
    DECLARE nID, bCursor INT; 
    DECLARE cursorQuery CURSOR FOR 
     SELECT ID 
     FROM information_schema.processlist 
     WHERE `TIME` > 10; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET bCursor = 1; 

    OPEN cursorQuery; 
    SET bCursor = 0; 

    WHILE bCursor = 0 DO 
     FETCH cursorQuery INTO nID; 
     KILL nID; 
    END WHILE; 

    CLOSE cursorQuery; 
END // 
DELIMITER ; 

的過程是非常簡單的: 獲取所有的連接ID隨時間大於10,遍歷結果並殺死他們

而且你可以讓一個cron任務調用ClearDB()程序或喲ü可以調用它每次你打開這樣的一個新的連接時間:

$pDB = new mysqli('localhost', 'user', 'pass', 'database'); 
if ($pDB->connect_error) 
{ 
    // Handle the error 
} 
$pDB->query('CALL ClearDB()'); 

希望這將幫助別人:)