有没有可能防止MySQL查询运行错误并导致您的网站瘫痪


Is it possible to keep a MySQL query from running awry and bringing down your site?

是否可以配置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);
  }
}

请参阅此处的其余相关答案:无论如何都要限制MySQL查询执行时间?