网站首页 文章专栏 mysql慢查询日志
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,MySQLl数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
1. 查看慢日志参数:
--查询配置命令
show variables like '%query%';
--当前配置参数
binlog_rows_query_log_events OFF
ft_query_expansion_limit 20
have_query_cache YES
--时间限制,超过此时间,则记录
long_query_time 10.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 OFF
--日志文件
slow_query_log_file /var/lib/mysql/********.log
2. 修改当前配置
set global 变量名 = 值;
--例如,修改时间限制为20 slong_query_time = 20;
#使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)
ps:也可以直接打开慢日志配置文件进行修改,但必须重启服务才能生效
3. 查看MySQL慢日志
mysqldumpslow -s at -a /usr/local/var/mysql/MacBook-Pro-3-slow.log
常遇问题及解决
1:
mysql> set global slow_query_log=1;
ERROR 29 (HY000): File ' /var/lib/mysql/********.log' not found (Errcode: 13 - Permission denied)
mysql> exit;
mysql对该文件夹无写权限
解决办法:
发现mysql的data目录用户及用户组权限不够
chown -R mysql:mysql /var/lib/mysql/
2:分批存储
为了使数据更加的清晰可见,我们可以用借助定时任务,每日更新一次日志的存储路径
mysql -u${DB_USER} -p${DB_PASSWD} -e "SET GLOBAL slow_query_log_file ='${MYSQL_DATA}/${DATE}.log';"
转载请注明出处