由于我编写的一些糟糕的脚本,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 来解决这个问题确实不是一个好主意。你应该尝试识别并优化导致服务器过载的查询。
以下两个提示可以帮助您:
- mysqltuner.pl将分析您当前的配置并向您显示一些明显的性能杀手所在。
- 这慢查询日志将记录所有持续时间超过可配置时间的查询。然后,您可以使用
EXPLAIN
SQL 命令分析单个查询。
答案3
monit 将为您完成此操作: http://en.wikipedia.org/wiki/Monit