一、相关概念
MySQL日志类型:二进制日志,错误日志,通用查询日志,慢查询日志。
慢查询:所谓慢查询指的是在MySQL查询中,所有查询时间超过设定值(long_query_time)的查询被称为慢查询。
慢查询日志(slow_query_log):用来记录所有查询时间超过long_query_time秒的查询记录的日志。
开启慢查询的意义:定位分析性能的瓶颈,更好的优化数据库系统的性能。
二、相关参数
进入MySQL后输入一段指令:
mysql> show variables like "%quer%";
意思就是显示出所有含有“quer”的变量,我的得到如下结果:
其中我们关注四个与慢查询有关的参数:
(1)slow_query_log 设置为 ON 则慢查询日志开启,OFF 则关闭,默认为 OFF 关闭状态。
(2)slow_query_log_file 指定慢查询日志文件的保存目录,我的日志文件放在了 /data/mysql/slow.log。
(3)long_query_time 指定慢查询的时间界限,查过这个时间查询的都会写入慢查询日志,默认为10秒,我的是1秒。
(4)log_queries_not_using_indexes 设置为ON则只记录没有加索引的慢查询,设置为OFF则会记录所有慢查询。
再输入如下指令:
mysql> show variables like "%log_output%";
(5)log_output 指的是MySQL日志(不只是慢查询日志)存储方式,有两种方式,第一种 FILE 指以日志文件保存,如果是慢查询日志则由 slow_query_log_file 指定。第二种 TABLE 指保存在数据库中,保存位置是 MySQL 数据库的 slow_log 表下面。可以两种记录方式都开启,比如上图,我的就开启来两种记录方式。
三、修改配置
1、开启慢查询日志:
mysql> set global slow_query_log='ON';
2、指定日志文件存放位置:
mysql> set global slow_query_log_file='/data/mysql/slow.log';
3、指定慢查询时间门槛为1秒:
mysql> set global long_query_time=1;
4、开启只记录没有加索引的慢查询
mysql> set global log_queries_not_using_indexes='ON';
5、设置日志输出方式为输出到数据库表:
mysql> set global log_output=’TABLE’;
永久修改:以上修改都只是临时修改,数据库重启后都会失效,如果需要永久生效,需要修改 my.cnf 文件。输入如下指令:
vim /etc/my.cnf
在 mysqld 下添加你需要的配置,例如:
:wq保存退出,然后输入如下指令重启mysql服务使其生效
service mysqld restart