MYSQL5.7.9开启慢查询日志的技巧
程序员文章站
2024-02-23 23:47:52
用mysql 5.7.9 作为zabbix 2.4.7 的监控数据库. 前段时间开启了慢查询日志, 后来发现慢查询日志膨胀到了700m
查看最后100条 大部分都是 0....
用mysql 5.7.9 作为zabbix 2.4.7 的监控数据库. 前段时间开启了慢查询日志, 后来发现慢查询日志膨胀到了700m
查看最后100条 大部分都是 0.1 秒的 后来想改, 以前是动态设置的 set global slow_query_log=1; 方式的 .
然后想直接用配置文件/etc/my.cnf 配慢查询
# remove leading # and set to the amount of ram for the most important data # cache in mysql. start at % of total ram for dedicated server, else %. innodb_buffer_pool_size = m # remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # these are commonly set, remove the # and set as required. basedir = /lanmp/mysql datadir = /mysqldata/data port = # server_id = ..... socket = /tmp/mysql.sock # remove leading # to set options mainly useful for reporting servers. # the server defaults are faster for transactions and fast selects. # adjust sizes as needed, experiment to find the optimal values. 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='set names utf' slow_query_log = slow_query_log_file = /mysqldata/mysql_slow_query.log long_query_time = log_queries_not_using_indexes = on
反复启动了好多次 service mysqld restart
mysql> show variables like '%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 | +------------------------------+---------------------------------+ 13 rows in set (0.00 sec)
老是off 状态 而其他的 long_query_time 得到了改变 5秒
用动态方式设置 报错
mysql> set global slow_query_log=1; error 29 (hy000): file '/mysqldata/mysql_slow_query.log' not found (errcode: 13 - permission denied)
对我已经把它给删了, 为傻不自己创建个?
只好自己touch 一个
还是报错 ?
ps -ef |grep mysqld 发现 还有个mysql用户启动了mysql
看来 是用mysql用户读取慢查询日志的 用户权限问题啦
下面给大家介绍开启mysql慢查询日志
查看配置:
//查询慢查询时间 show variables like "long_query_time";默认10s //查看慢查询配置情况 show status like "%slow_queries%"; //查看慢查询日志路径 show variables like "%slow%";
修改配置文件
在my.ini中加上下面两句话
log-slow-queries = d:\wamp\mysql_slow_query.log long_query_time=5
第一句使用来定义慢查询日志的路径(因为是windows,所以不牵涉权限问题)
第二句使用来定义查过多少秒的查询算是慢查询,我这里定义的是5秒
第二步:查看关于慢查询的状态
执行如下sql语句来查看mysql慢查询的状态
复制代码 代码如下:
show variables like '%slow%';
执行结果会把是否开启慢查询、慢查询的秒数、慢查询日志等信息打印在屏幕上。
第三步:执行一次慢查询操作
其实想要执行一次有实际意义的慢查询比较困难,因为在自己测试的时候,就算查询有20万条数据的海量表,也只需要0.几秒。我们可以通过如下语句代替:
复制代码 代码如下:
select sleep(10);
第四步:查看慢查询的数量
通过如下sql语句,来查看一共执行过几次慢查询:
show global status like '%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