php - MySQL 存储过程终止超过 10 秒的连接

标签 php mysql stored-procedures

如何使用 MySQL 和 PHP 关闭 (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 ;

过程非常简单: 获取所有TIME大于10的连接ID,循环结果并kill掉

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

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

希望它能对某人有所帮助:)

关于php - MySQL 存储过程终止超过 10 秒的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580829/

相关文章:

php - ClassName::class 在 PHP 中是什么意思?

MYSQl 使用评论优化博客文章表

php - 类别和自定义用户类别哪种表结构更好

mysql - SQL存储过程

sql-server - 将存储过程数据返回到 ms access 表

php mysql语法错误

php - HTML5 表单提交等效 $.post

javascript - 从具有多个变量的表单构建一个帖子数据结构

MySQL触发不同数据库不同服务器

tsql - 通过嵌套的 select case 语句过滤存储过程记录