是否可以配置 MySQL,使其具有某种类似于 PHP 最大执行时间的执行限制,以便如果查询花费的时间超过 - 比如说 - 30 秒,它会自动被终止?
我刚刚在 phpMyAdmin 上运行了一个写得不好的查询作为测试,它耗尽了所有 CPU 并杀死了我的网站大约 15 分钟...不得不重新启动 MySQL 才能恢复我的网站。
有什么想法吗?
最佳答案
MySQL 没有 PHP 那样的时间限制功能。有些选项是你可以修改 my.conf 中的 hit_counter 变量或 join_table 大小,甚至禁止持久连接。但要真正获得您想要的功能,您必须编写自己的轮询守护程序来检查 MySQL 并确保没有任何异常。
StackOverflow 上的用户 x9sim9 自愿提供了以下 PHP 脚本来执行此操作 - 尽管您可以使用任何其他脚本语言对其进行编码。让你的 crontab 频繁执行(每分钟左右)。
$result = mysql_query("SHOW FULL PROCESSLIST");
while ($row=mysql_fetch_array($result))
{
$process_id = $row["Id"];
if ($row["Time"] > 200 )
{
$sql="KILL {$process_id}";
mysql_query($sql);
}
}
请在此处查看相关答案的其余部分:Anyway to Limit MySQL Query Execution time?
关于php - 是否有可能防止 MySQL 查询出错并导致您的网站瘫痪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8811787/