MySQL存储过程,可以在10秒以上终止连接

时间:2012-11-27 09:16:41

标签: php mysql stored-procedures

如何关闭(KILL)使用MySQL和PHP执行时间太长的连接

1 个答案:

答案 0 :(得分:3)

解决方案是编写一个存储过程,在一段时间内杀死所有连接:

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 ;

程序非常简单: 获取TIME大于10的所有连接ID,遍历结果并终止它们

您可以创建一个cron任务来调用ClearDB()过程,或者每次打开这样的新连接时都可以调用它:

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

希望它会帮助某人:)

相关问题