MYSQL5.7.9开启慢查询日志的技巧
用MYSQL5.7.9作为ZABBIX2.4.7的监控数据库.前段时间开启了慢查询日志,后来发现慢查询日志膨胀到了700M
查看最后100条大部分都是0.1秒的后来想改,以前是动态设置的setglobalslow_query_log=1;方式的.
然后想直接用配置文件/etc/my.cnf配慢查询
#Removeleading#andsettotheamountofRAMforthemostimportantdata #cacheinMySQL.Startat%oftotalRAMfordedicatedserver,else%. innodb_buffer_pool_size=M #Removeleading#toturnonaveryimportantdataintegrityoption:logging #changestothebinarylogbetweenbackups. #log_bin #Thesearecommonlyset,removethe#andsetasrequired. basedir=/LANMP/mysql datadir=/MYSQLDATA/data port= #server_id=..... socket=/tmp/mysql.sock #Removeleading#tosetoptionsmainlyusefulforreportingservers. #TheserverdefaultsarefasterfortransactionsandfastSELECTs. #Adjustsizesasneeded,experimenttofindtheoptimalvalues. join_buffer_size=M sort_buffer_size=M read_rnd_buffer_size=M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES character_set_server=utf init_connect='SETNAMESutf' slow_query_log= slow_query_log_file=/MYSQLDATA/mysql_slow_query.log long_query_time= log_queries_not_using_indexes=ON
反复启动了好多次servicemysqldrestart
mysql>showvariableslike'%query%'; +------------------------------+---------------------------------+ |Variable_name|Value| +------------------------------+---------------------------------+ |binlog_rows_query_log_events|OFF| |ft_query_expansion_limit|20| |have_query_cache|YES| |long_query_time|5.000000| |query_alloc_block_size|8192| |query_cache_limit|1048576| |query_cache_min_res_unit|4096| |query_cache_size|1048576| |query_cache_type|OFF| |query_cache_wlock_invalidate|OFF| |query_prealloc_size|8192| |slow_query_log|ON| |slow_query_log_file|/MYSQLDATA/mysql_slow_query.log| +------------------------------+---------------------------------+ 13rowsinset(0.00sec)
老是OFF状态而其他的LONG_QUERY_TIME得到了改变5秒
用动态方式设置报错
mysql>setglobalslow_query_log=1; ERROR29(HY000):File'/MYSQLDATA/mysql_slow_query.log'notfound(Errcode:13-Permissiondenied)
对我已经把它给删了,为傻不自己创建个?
只好自己touch一个
还是报错?
ps-ef|grepmysqld发现还有个mysql用户启动了mysql
看来是用mysql用户读取慢查询日志的用户权限问题啦
下面给大家介绍开启mysql慢查询日志
查看配置:
//查询慢查询时间 showvariableslike"long_query_time";默认10s //查看慢查询配置情况 showstatuslike"%slow_queries%"; //查看慢查询日志路径 showvariableslike"%slow%";
修改配置文件
在my.ini中加上下面两句话
log-slow-queries=D:\wamp\mysql_slow_query.log long_query_time=5
第一句使用来定义慢查询日志的路径(因为是windows,所以不牵涉权限问题)
第二句使用来定义查过多少秒的查询算是慢查询,我这里定义的是5秒
第二步:查看关于慢查询的状态
执行如下SQL语句来查看mysql慢查询的状态
showvariableslike'%slow%';
执行结果会把是否开启慢查询、慢查询的秒数、慢查询日志等信息打印在屏幕上。
第三步:执行一次慢查询操作
其实想要执行一次有实际意义的慢查询比较困难,因为在自己测试的时候,就算查询有20万条数据的海量表,也只需要0.几秒。我们可以通过如下语句代替:
SELECTSLEEP(10);
第四步:查看慢查询的数量
通过如下sql语句,来查看一共执行过几次慢查询:
showglobalstatuslike'%slow%';
mysql日志的配置:
注意:这些日文件在mysql重启的时候才会生成#记录所有sql语句
log=E:/mysqllog/mysql.log #记录数据库启动关闭信息,以及运行过程中产生的错误信息 log-error=E:/mysqllog/myerror.log #记录除select语句之外的所有sql语句到日志中,可以用来恢复数据文件 log-bin=E:/mysqllog/bin #记录查询慢的sql语句 log-slow-queries=E:/mysqllog/slow.log #慢查询时间 long_query_time=0.5