php - 是否有可能防止 MySQL 查询出错并导致您的网站瘫痪?

标签 php mysql database

是否可以配置 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/

相关文章:

php - 在php中将一个大字符串写入文件

php - 如何让我的 friend 在大型数据库上进行 mysql 查询?

database - 为什么使用 ORDER BY PRIMARY KEY 的完整 TADIR 选择比 INTO 排序表慢得多?

javascript - 在我的网站上使用 Node.js 匹配用户

php - 可打印分页 MySQL 数据库

php - 如何通过php获取mysql数据库最后一条记录 "id"的值

php - MySQL表中的多个连接

php - Sublime Text : in HTML links having PHP snippets, 符号突出显示红色?

mysql - 转义 '%' 字符时出现问题

mysql - 通过查询更改 SQL 列标题