MySQL的监控原理

MySQL的监控通过日志文件来实现 。
那么MySQL的日志文件有哪些类型呢? MySQL使用以下这几种类型的日志来记录服务器活动信息 。
Error log错误日志:关于启动、关闭和异常情况的诊断消息(排查错误)
General query log通用查询日志:服务器从客户端接收到的所有语句(全局监控)
Slow query log慢速查询日志:执行时间较长的查询(性能优化)
Audit log审计日志:针对企业版的策略审计(主从搭配)
Binary log二进制日志:用于修改数据(备份用的到)
这5个类型的日志文件涵盖了所有MySQL的运行记录,是将来排查问题,优化性能的重要依据 。很多经验丰富的DBA遇到问题就是先从这些日志文件下手分析的 。重点之重,要考的 。
 
日志文件的特点:占用大量的磁盘空间,存储在文件中,也可以存储在表中,但只有Slow query log慢速查询日志和General query log通用查询日志是可以存储在表中 。可以用文本格式书写,但Binary log二进制日志除外 。(因为Binary log中都是二进制格式啊!)
 
Error log错误日志:设置文件名set- -log- Error =filename来记录错误到给定的文件 。或者在 UNIX或基于UNIX的系统中使用- -log-syslog服务器选项将错误消息发送到syslog系统日志上 。
General query log通用查询日志:设置文件名set- -general_log_file=filename为日志查询 。全局general_log和general_log_file服务器变量提供了对通用查询日志的运行时控制 。将general_log设置为0(或OFF)以禁用日志,或设置为1(或ON)以启用日志 。
Slow query log慢速查询日志:设置文件名set- -slow_query_log_file=filename以提供对慢速查询日志的运行时控制 。设置slow_query_log为0禁用日志,设置为1启用日志,如果日志文件已经打开,则关闭该日志文件并打开新文件 。
Binary log二进制日志:设置Set --log-bin以启用二进制日志记录 。
服务器使用该选项值作为基本名称,在创建新日志文件时向基本名称添加一个递增的连续数字后缀 。这些日志文件以二进制格式而不是文本格式存储 。
Audit log审计日志:审计日志作为Enterprise Edition插件提供,当加载时,您可以使用该插件将事件记录到audit_log_file选项指定的文件中 。审计不断写入审计日志,直到您删除插件,或者使用audit_log_policy=NONE选项设置关闭审计 。通过在服务器启动时使用audit_log=FORCE_PLUS_PERMANENT作为选项来防止删除插件 。
 
接下来我们逐个讲解
General query log通用查询日志可以使用general_log服务器选项启用,它是用来记录所执行语句的连接信息和详细信息 。包括记录每个连接的时间和类型以及所有操作的进程ID,记录对所有表执行的所有语句,但不包括存储在二进制日志的更新操作行变化,因为这些不是更新操作以语句形式被存储的 。而且General query log通用查询日志扩张的很快,但是如果以一个短时间内启用它,可以收集这些时间内所有活动的完整记录 。
 
具体记录了些什么,我们在此举例说明,请看下面:
1424 Query /* mem dbpool.default */ update
`mem__events`.events set lastUpdateTime=1397633565708 where id=7 1429 Query /* mem dbpool.default */ update `mem__events`.events set lastUpdateTime=1397633565708 where id=4970 1424 Query /* mem dbpool.default */ commit 1429 Query /* mem dbpool.default */ commit 150526 7:32:46 1434 Connect root@localhost on mysql 1434 Query SET NAMES latin1 1434 Query SET character_set_results = NULL
里面包含事件类型和查询内容,示例类型:查询、连接
上面代码显示每个连接和查询的详细信息,记录每次连接的时间和所有操作的进程号 。
 
Slow query log慢速查询日志可以通过使用slow_query_log服务器选项启用 。用于记录执行时间超过指定阈值的语句 。一般设定10秒(默认),可以使用long_query_time server选项更改此持续时间 。可以指定微秒精度的秒数 。可以记录不使用索引的语句,甚至是long_query_time下面的语句 。比如用log_queries_not_using_indexes来实现 。可以使用mysqldumpslow命令行程序查看Slow query log慢速查询日志 。
Slow query log慢速查询日志是记录管理和复制语句 。但默认情况下,慢速查询日志不记录管理语句 。可以通过启用log_slow_admin_statements服务器选项来记录这些语句 。默认情况下,从复制主机复制的语句不会出现在慢速查询日志中,即使它们超过了long_query_time服务器选项指定的时间 。此时可以要记录这些语句,请启用log_slow_slave_statements服务器选项来实现 。
如何过滤慢速查询日志事件?这有两个额外的服务器选项,您可以使用来过滤缓慢的查询日志输出:


推荐阅读