第一章 MySQL日志审核
众所周知,SQM软件对于MySQL数据库的审核,无法像ORACLE数据库那样可以直接对整个数据库做SQL审核。只支持JAVA探针获取SQL的审核方式、MySQL日志审核。以及更适合开发人员自查的SQL脚本审核。
对于SQL脚本审核与其他库的操作使用方式一致,这里不再说明。重点讨论一下MySQL独有的慢日志审核方式。
MySQL日志审核,是通过分析慢查日志(slow_log)和通用日志(general_log),提取DML语句,进行SQL审核。实现原理是通过分析日志文件提取SQL语句,并对相应SQL语句在目标数据库获取SQL的执行计划、统计对象等信息。进而收集展示到SQM软件中并提供给用户做分析定位性能问题使用。
第二章 MySQL日志审核方式和配置
MySQL日志审核根据慢日志或通用日志的数据存放方式。可以有两种实现途径:
通过慢日志/通用日志文件审核;
通过慢日志/通用日志数据表审核。
由于慢查询的相关参数long_query_time可以记录执行超时的SQL信息。因此SQM在获取问题SQL时也主要以慢日志审核为主。
对于慢日志审核方式,主要包括:用户手工上传文件、系统定期抓取文件、系统定期从表中获取。
2.1 系统定期抓取慢日志文件
默认情况下,MySQL慢日志/通用日志是写入到:主机名-slow.log和主机名-general.log文件中的。因此SQM抓取慢日志时,也是从上述两个文件中提取相应的低效SQL的。
可以设置SQM定期抓取日志文件的频率。
用SYS用户在SQM/系统管理/通用配置/运行参数界面调整。默认7200秒,可以根据实际情况调整。调整后需要重启TOMCAT应用。

2.1.1 权限配置
为了拥有对慢日志/通用日志的文件读取权限,需要SQM应用服务器可以访问数据库服务器的22端口。
可用如下命令测试:

为了让SQM用户拥有获取SQL执行计划的权限,需要按如下方式授权:
grant all on sqm.* to 'sqm'@'%' identified by 'sqm';
grant select on 目标数据库.* to sqm;
flush privileges;
检查并修改慢日志权限配置:
show variables like '%log_output%';
--log_output 默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE

show variables like '%quer%';
-- log_queries_not_using_indexes 默认是OFF,表示是否记录没有使用索引的查询
-- slow_query_log 默认是OFF,表示是否打开慢查询
-- long_query_time默认是 10.000000,表示记录超过时间的慢查询
-- general_log 默认是OFF,表示是否打开general log

临时修改参数:
set global log_output='FILE';-- FILE/TABLE
set global slow_query_log = ON;
SET GLOBAL long_query_time = 1;-- 10.000000
SET GLOBAL log_queries_not_using_indexes = ON;-- 是否打开看个人需要
永久修改参数:
Vi /etc/my.cnf
log_output='FILE'
slow_query_log =1
long_query_time = 1
slow_query_log_file=/var/lib/mysql/Cent-SQM-slow.log
2.1.2 自动开始审核
查看日志审核:


如下为根据日志文件-采集间隔时间设置,系统自动获取的日志文件:

调整审核规则:
可以对当前审核实例的审核规则做变更:如调整严重程度、删除审核规则等。

查看审核SQL:
按照不同查询条件分别查看问题SQL。其中多份日志中存在的相同SQL系统会自动合并及累加信息。


2.2 手工上传文件
2.2.1 权限配置
对于手工上传的慢日志审核方式,由于是人工下载文件后上传。不再需要开放数据库服务器的22端口。但缺少了审核日志的实时性。
其余权限配置部分与系统定期抓取日志方式一致,不再列出。
2.2.2 手工下载日志

2.2.3 手工上传日志
直接点击上传文件

上传文件后系统会自动进行审核:

审核完毕即可查看相关SQL信息。

2.3 系统定期抓取慢日志数据表
默认情况下,MySQL慢日志/通用日志是写入到:主机名-slow.log和主机名-general.log文件中的。但也可以修改为写入到mysql.slow_log和mysql.general_log表中。
因此SQM抓取慢日志时,也是从上述两个数据表中提取相应的低效SQL的。并且在采集完成后, 会执行truncate操作,默认采集频率为1分钟,用SYS用户在SQM/系统管理/通用配置/运行参数界面进行配置。

2.3.1 权限配置
由于是系统自动获取低效日志数据表。不再需要开放数据库服务器的22端口。
为了让SQM用户拥有获取SQL执行计划及慢日志数据表的获取权限,需要按如下方式授权:
grant all on sqm.* to 'sqm'@'%' identified by 'sqm';
grant select on 目标数据库.* to sqm;
grant drop on mysql.slow_log to sqm; --增加了对慢日志的定期删除权限
grant drop on mysql.general_log to sqm; --增加了对通用日志的定期删除权限
flush privileges;
检查并修改慢日志权限配置:
show variables like '%log_output%';
--log_output 默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE

show variables like '%quer%';
-- log_queries_not_using_indexes 默认是OFF,表示是否记录没有使用索引的查询
-- slow_query_log 默认是OFF,表示是否打开慢查询
-- long_query_time默认是 10.000000,表示记录超过时间的慢查询
-- general_log 默认是OFF,表示是否打开general log

临时修改参数:
set global log_output='TABLE';-- FILE/TABLE
set global slow_query_log = ON;
SET GLOBAL long_query_time = 1;-- 10.000000
SET GLOBAL log_queries_not_using_indexes = ON;-- 是否打开看个人需要
永久修改参数:
Vi /etc/my.cnf
log_output='TABLE'
slow_query_log =1
long_query_time = 1
slow_query_log_file=/var/lib/mysql/Cent-SQM-slow.log
2.3.2 自动开始审核
查看慢日志数据表:

查看日志审核:


如下为根据日志文件-采集间隔时间设置,系统自动获取的日志文件:

调整审核规则:
可以对当前审核实例的审核规则做变更:如调整严重程度、删除审核规则等。

查看审核SQL:
按照不同查询条件分别查看问题SQL。其中多份日志中存在的相同SQL系统会自动合并及累加信息。


为了控制慢查询数据表的数据量,SQM系统设置了慢SQL在数据表的保留期限,60秒后的慢日志被自动删除。

对于实际的用户环境中,应避免删除数据库相关日志。采取的调整方法可以通过设置慢日志的输出方式为:文件+表的方式。SQM定期清理数据表中的数据量。真正的慢查询日志还保留在慢查询文件中。
log_output='FILE,TABLE'


可以看到系统不再定期抓取慢日志数据文件:

对于新执行的SQL语句,也能通过数据表定期获取累加SQL执行信息。

第三章 总结
对于MySQL慢日志审核,重点是保证网络权限的畅通,以及控制获取慢日志的审核间隔。通过文件获取的执行时间比较长。默认为2小时。对于执行SQL比较频繁且希望更及时的审核SQL的场景,建议设置慢日志删除方式为文件+表,让SQM通过慢日志数据表的方式高频的审核SQL慢日志数据。




