如果 MySQL 占用了太多的处理能力,有没有办法自动重新启动它?

如果 MySQL 占用了太多的处理能力,有没有办法自动重新启动它?

由于我编写的一些糟糕的脚本,MySQL 有时会失控 - 占用大量 CPU 能力(平均负载超过 20 - 我只有 8 个核心)!当我重新启动时,一切又恢复正常。

所以我的问题是:当 MySQL 占用超过 400% 的 CPU 时,有没有办法重新启动 MySQL?

最好我仅重新启动导致问题的相关帐户。

服务器:带有 whm 的 Linux

答案1

在这种情况下重启 mysql 是一种不好的做法。它会导致缓冲区混乱,并且如果数据库足够大 - 则需要一些时间来预热。

我认为您有一些繁重的查询消耗了太多的 CPU。

用于mysql> show full processlist识别长时间运行的查询并尝试优化它们:创建索引,重写查询以更快地运行并减少排序。

为了立即得到结果,你可以使用以下方法终止此查询:

mysql> kill QUERYIDNUMBER

直接回答您的问题 - 您可以安全地使用 重新启动它service mysql restart,但这将花费很长时间。重新启动将阻止所有与数据库的新连接,但它将等到所有正在运行的查询完成。您可以终止繁重的查询以加快速度。

此外,如果您需要加快 mysql 重启速度,有一个很好的技巧可以做到。

首先,运行mysql> set global innodb_max_dirty_pages_pct = 0; 然后等待,直到所有(或几乎所有)脏缓冲区页面刷新到磁盘,参见 mysqladmin ext -i10 | grep dirty

当你有如下输出时:

| Innodb_buffer_pool_pages_dirty | 12 |

您可以重新启动 mysql 服务器,速度会更快:

service mysql restart

答案2

我只能重申,通过重启 mysql 来解决这个问题确实不是一个好主意。你应该尝试识别并优化导致服务器过载的查询。

以下两个提示可以帮助您:

  1. mysqltuner.pl将分析您当前的配置并向您显示一些明显的性能杀手所在。
  2. 慢查询日志将记录所有持续时间超过可配置时间的查询。然后,您可以使用EXPLAINSQL 命令分析单个查询。

答案3

monit 将为您完成此操作: http://en.wikipedia.org/wiki/Monit

相关内容