mysql慢查询日志
作为运维人员,磁盘空间也是监控中重要的一个环节,数据库服务器磁盘空间不足告警,有时候不是因为业务数据量大,而是因为开启了慢查询,如果my.cnf文件中log-queries-not-using-indexes = 1,那么慢查询记录的日志中就不完全是慢查询日志,它包含了查询中没有引用索引的语句,久而久之慢查询日志文件会越来越大,如下为清理慢查询日志,以及关闭未走索引查询记录slow log。
正确安全清空在线慢查询日志slowlog的流程
查看慢查询日志状态
mysql> show variables like '%slow%';
关闭慢查询日志
mysql> set global slow_query_log=0;
mysql> show variables like '%slow%';
指定新的慢查询日志文件路径
mysql> set global slow_query_log_file='/var/lib/mysql/slow_queries_new.log';
开启慢查询日志
mysql> set global slow_query_log=1;
mysql> show variables like '%slow%';
在新的慢查询日志文件中,检查慢查询语句
mysql> select sleep(5) as a, 1 as b;
more /var/lib/mysql/slow_queries_new.log
备份原有慢查询日志到新的目录
mv /var/lib/mysql/old-slow.log /bakup/old-slow.log.bak #备份慢查询日志
最后删除文件慢查询文件
最后删除文件慢查询文件 rm /var/lib/mysql/old-slow.log
关闭未走索引查询语句记录slow log
set global log_queries_not_using_indexes = 'off';
三、相关参数
mysql> show variables like '%log_output%'; # 默认是FILE +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_output | TABLE | +---------------+-------+ 1 row in set (0.00 sec) mysql> show variables like '%quer%'; Connection id: 1694418241 Current database: *** NONE *** +-------------------------------+-------------------------------------+ | Variable_name | Value | +-------------------------------+-------------------------------------+ | ft_query_expansion_limit | 20 | | have_query_cache | YES | | log_queries_not_using_indexes | ON | | log_slow_queries | ON | | long_query_time | 2.000000 | | query_alloc_block_size | 8192 | | query_cache_limit | 2097152 | | query_cache_min_res_unit | 4096 | | query_cache_size | 67108864 | | query_cache_type | OFF | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | | slow_query_log | ON | | slow_query_log_file | /home/mysql/data3311/sql01-slow.log | +-------------------------------+-------------------------------------+ 14 rows in set (0.00 sec) -- log_output 默认是FILE,表示慢查询日志输入至日志文件,可以通过set修改输出为TABLE -- log_queries_not_using_indexes 默认是OFF,表示是否记录没有使用索引的查询 -- slow_query_log 默认是OFF,表示是否打开慢查询 -- long_query_time默认是 10.000000,表示记录超过时间的慢查询 SET global slow_query_log = ON; # 打开慢查询记录 SET GLOBAL long_query_time = 2.000000; # 记录超过2秒的慢查询句语 SET GLOBAL log_queries_not_using_indexes = ON; # 开启 记录没有使用索引的语句 SET global log_output='TABLE' # 默认为FILE,改为TABLE