MySQL监控是通过日志文件实现的。那么MySQL日志文件有哪些类型呢?MySQL使用以下类型的日志来记录服务器活动信息。Errorlog错误日志:关于启动、关闭、异常情况的诊断信息(故障排除)通用查询日志通用查询日志:服务器从客户端接收到的所有语句(全局监控)慢查询日志慢查询日志:慢执行时间长查询(性能优化)Auditlogauditlog:针对企业版的策略审计(主从搭配)Binarylogbinarylog:用于修改数据(用于备份)这5类日志文件涵盖了所有MySQL的操作记录,是以后重要的依据故障排除和性能优化。许多有经验的DBA在遇到问题时都是从这些日志文件开始的。最重要的是测试。日志文件的特点:占用磁盘空间大,可以存放在文件中,也可以存放在表中,但表中只能存放慢查询日志和一般查询日志。可以写成文本格式,Binarylog二进制日志除外。(因为Binarylog是二进制格式!)Errorlogerrorlog:设置文件名set--log-error=filename,将错误记录到给定的文件中。或者在UNIX或基于UNIX的系统上使用--log-syslog服务器选项将错误消息发送到syslog系统日志。通用查询日志通用查询日志:设置文件名set--general_log_file=filename用于日志查询。全局general_log和general_log_file服务器变量提供对一般查询日志的运行时控制。将general_log设置为0(或OFF)以禁用日志记录,或设置1(或ON)以启用日志记录。慢查询日志:设置文件名set--slow_query_log_file=filename提供对慢查询日志的运行时控制。将slow_query_log设置为0以禁用日志记录,设置为1以启用日志记录,如果日志文件已经打开,则关闭日志文件并打开一个新文件。Binarylog二进制日志:设置Set--log-bin以启用二进制日志记录。服务器使用此选项值作为基本名称,在创建新日志文件时将递增的连续数字后缀添加到基本名称。这些日志文件以二进制格式而不是文本格式存储。审计日志审计日志:审计日志作为企业版插件提供,加载后,您可以使用该插件将事件记录到audit_log_file选项指定的文件中。审计会一直写入审计日志,直到您删除插件,或使用audit_log_policy=NONE选项设置关闭审计。通过在服务器启动时使用audit_log=FORCE_PLUS_PERMANENT作为选项来防止删除插件。接下来我们对Generalquerylog一一进行说明。可以使用general_log服务器选项启用通用查询日志,用于记录连接信息和执行语句的详细信息。包括记录每个连接的时间和类型以及所有操作的进程ID,记录所有表上执行的所有语句,但不包括存储在二进制日志中的更新操作行更改,因为这些不存储为更新操作的语句。而generalqueryloggeneralquerylog扩展的非常快,但是如果在短时间内启用,可以收集到这段时间所有活动的完整记录。具体记录了什么,我们这里举个例子,请看下面:1424Query/*memdbpool.default*/update`mem__events`.eventssetlastUpdateTime=1397633565708whereid=71429Query/*memdbpool.default*/update`mem__events`.eventssetlastUpdateTime=13977633whereid=13977633whereid=7142949701424Query/*memdbpool.default*/commit1429Query/*memdbpool.default*/commit1505267:32:461434Connectroot@localhostonmysql1434QuerySETNAMESlatin11434QuerySETcharacter_set_results=NULL包含事件类型和查询内容,示例类型:查询,连接。上面的代码显示了每个连接和查询的详细信息,记录了每个连接的时间和所有操作的进程号。慢查询日志可以使用slow_query_log服务器选项启用慢查询日志。用于记录执行时间超过指定阈值的语句。一般设置10秒(默认),你可以使用long_query_time服务器选项来改变这个持续时间。可以用微秒精度指定秒。可以记录不使用索引的语句,即使是低于long_query_time的语句。比如使用log_queries_not_using_indexes来实现。可以使用mysqldumpslow命令行程序查看Slowquerylog慢查询日志。慢查询日志慢查询日志记录管理和复制语句。但默认情况下,慢查询日志不记录管理语句。可以通过启用log_slow_admin_statements服务器选项来记录这些语句。默认情况下,从复制主机复制的语句不会出现在慢查询日志中,即使它们超过了long_query_time服务器选项指定的时间。此时要记录这些语句,请启用log_slow_slave_statements服务器选项来执行此操作。如何过滤慢查询日志事件?有两个额外的服务器选项可用于过滤慢速查询日志输出:第一个min_examined_row_limit:指定一条语句必须检查的最小行数,以便慢速查询日志记录该语句。第二个log_throttle_queries_not_using_indexes:它指定慢查询在60秒内记录的查询数,因为它们不使用索引。慢查询日志记录了这些查询的次数后,汇总了该时间段内剩余语句的次数和总耗时。默认情况下,此服务器选项的值为0,这意味着它会记录所有此类查询。例如:#Time:date-and-time#User@Host:root[root]@localhost[127.0.0.1]Id:7694#Query_time:1.010099Lock_time:0.000023Rows_sent:0Rows_examined:1SETtimestamp=timestamp;/*memdbpool.default*/update`mem__inventory`.`MysqlServer`set`timestamp`=timestampwherehid=x'08310BA6528CBF5783BBD95CE5B4561F';示例包括服务器日期和时间、连接和查询信息、运行查询和持有锁的时间。我们使用mysqldumpslow查看慢查询日志。mysqldumpslow命令行程序总结了慢查询日志的内容。它将相似的查询分组在一起,例如将数字参数更改为N并将字符串参数更改为“S”,显示此类查询的数量以及运行查询所花费的平均和总时间。使用-g选项提供搜索词并仅显示与搜索词匹配的语句的摘要信息。您还可以通过设置log_output服务器选项来指定表或文件日志输出。.log_output服务器选项用于配置慢速查询日志记录和一般查询日志记录。它包含一个或多个FILE、TABLE或NONE值(以逗号分隔)。默认情况下,它的值为FILE。NONE表示日志既不写文件也不写表。NONE的存在导致FILE或TABLE被忽略。FILE表示将日志写入分别由slow_query_log_file和general_log_fileMySQL服务器选项指定的文件。默认值为MySQL数据目录文件中的hostname-slow.log和hostname.log。TABLE表示在mysql数据库中,慢查询日志写入slow_log表,通用日志写入general_log表。随着时间的推移,日志文件会占用更多空间。定期备份和删除旧的日志文件并重新记录到新的日志文件是DBA的日常工作之一。请注意,如果使用二进制日志进行复制,请谨慎使用。备份后,刷新日志。flushinglogs的注意事项1.创建新的二进制日志文件2.关闭并重新打开常规和慢查询日志文件。创建新日志时,当前日志文件必须在刷新前重命名。您可以创建自己的脚本或使用提供的mysql-log-rotate脚本来实现日志文件的定期轮换。备份日志文件后,刷新日志以强制MySQL服务器开始写入新的日志文件。可以通过执行FLUSHLOGSSQL语句或者执行mysqladminflush-logs来实现。刷新二进制日志会导致二进制日志序列中的下一个文件重新开始。当刷新正常和慢速查询日志时,这将关闭日志文件,重新打开它们,并以相同的文件名重新启动日志记录。要启动新日志,请在刷新之前重命名现有日志文件。
