MySQL”;wait_timeout”;由于长时间查询而不被尊重


MySQL "wait_timeout" not being honored for long query?

我正在尝试测试似乎被忽略的wait_timeout MySQL设置。

PHP脚本:

<?php
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$sql = mysqli_connect('localhost','root','root','mysql');
$query = "SHOW VARIABLES WHERE Variable_name='wait_timeout';";
$result = $sql->query($query) or die($query.'<br />'.$sql->error);
$row = $result->fetch_object();
echo "wait_timeout = " . $row->Value . "<br/>'n";
$time_start = microtime_float();
$query = "SELECT SLEEP(2) FROM mysql.user;";
$sql->query($query) or die($query.'<br />'.$sql->error);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo "Query completed in $time seconds<br/>'n";
echo "You got the page";

脚本输出:

wait_timeout = 2
Query completed in 8.0005459785461 seconds
You got the page

我的配置

mariadb-server-5.3.5
php5.3.6

我需要做什么才能强制MySQL在一定时间后超时查询

wait_timeoutinteractive_timeout都是断开连接之前的非活动时间。因此,在删除连接之前,连接必须处于空闲状态(不运行查询)。MySQL SLEEP()不计算在内,因为您正在运行查询。

您将不得不手动终止长时间运行的查询(没有设置让MySQL为您执行此操作)。你可以编写这个脚本。使用SHOW PROCESSLIST(或Innotop等外部工具)和KILL