如果是在系统中有安装过MySQL后,在安装好Nagios的plugins时,则会有2个自带用于监控MySQL的插件check_mysql和check_mysql_query。其中check_mysql不用说使用的最多了,可用于监控 MySQL的运行状态包括主从复制的状态,这个平时使用的也比较多,记得之前有找到一篇不错的Nagios默认插件介绍里面有详细的说明,需要可以看:http://jim123.blog.51cto.com/4763600/1955618,但是其中还有一个默认的插件check_mysql_query,它总体的参数都和check_mysql差不多,但是其中有一条:

 -q, --query=STRING
    SQL query to run. Only first column in first row will be read

很多人都没有对它做比较详细的解释,而从官方的帮助信息写的太简单了,从中看到的说明就有点容易造成混淆:只读第一行的第一列。一般我们去查SQL都会有很多信息,它只能读取第一行第一列的内容吗?其实不是的,它其实是用于返回SQL查询中一张表中记录的多少条,用于验证表中是否有N条记录,如果定义好warning和critical的值时,当记录条数大与或者等于时就会告警,举一个例子:

在所使用的MySQL中总共有7个用户,可以通过查询系统表mysql.user得到结果

mysql> SELECT COUNT(1) FROM mysql.user;
+----------+
| COUNT(1) |
+----------+
|        7 |
+----------+
1 row in set (0.00 sec)

注意这里必须使用super用户不然是看不到mysql.user表的,定义好在所使用的MySQL数据库中最多只能有7个用户,当出现第8个用户时就发告警,就这样使用:

[root@localhost libexec]# ./check_mysql_query  -H localhost -u root -p 'youpassword' -q "SELECT COUNT(1) FROM mysql.user;" -w 8

这样当MySQL中创建了第8个用户时就会发送告警信息。

   总之Nagios自带的check_mysql_query插件是用于监控如用户表或错误信息表之类的记录数较为恒定的表中记录数的,但是如果是要进一步的监控MySQL中表信息可以通过自行编写的脚本或者是官方提供的Perl脚本check_mysql_health来实现。