我在 Ubuntu 服务器上启用了 mysql 慢查询日志。我希望在出现任何慢查询时收到带有慢查询的电子邮件警报,以便我可以优化该 sql。我需要一个轻量级的解决方案。
答案1
如果您有能力等待缓慢的查询发生,那么请花时间处理它 - 您很幸运!
这不是我监控/调优系统的方法。我让系统记录所有查询,然后使用修改后的版本这个脚本从 WHERE 子句中删除文字,然后根据匿名查询的时间总和进行优先排序(我使用的代码还计算平均值、标准差和最大值)
但是,实现您的要求(从 cron 运行)的一个相当简单的解决方案是:
#!/bin/bash
CTL_FILE='/var/lock/slowchk'
LOG_FILE='/var/log/mysql_slow_query.log'
if [ ! -f ${CTL_FILE} ]; then
touch ${CTL_FILE}
fi
if [ ${LOG_FILE} -nt ${CTL_FILE} ]; then
touch ${CTL_FILE}
tail -200 ${LOG_FILE} | mail -s 'Slow Queries' [email protected]
else
touch ${CTL_FILE}
fi
请注意,查询仅在完成后才会出现在日志中 - 如果其中有一些真正的恶意内容,您可能需要解析“mysqladmin processlist”的输出以查找当前运行时间超过阈值的内容,以便将其终止。
答案2
我经常使用麦托普,顶部类似于 MySQL 的查询监视器,它是一个 Perl 脚本,通过一些黑客您可以添加发送警报通知的功能。