MySQL 5.6 查询日志 与 慢查询
记录所有查询的方法
打开my.ini 在 [mysqld]下面写
general_log= ON;
log_output= TABLE;
然后保存重启mysql
最后在mysql库下 general_log 表内可以查询想要的内容
general_log 可以在运行的时候执行 set global general_log=on;
来动态开启 这样就不用重启 MySQL 服务了。但是下次重启的时候又会失效,想要避免还得改配置文件。
log_output 也可以使用FILE格式,但是不知道为啥 我这里没能成功。
慢查询
开启
网上开启的方法都不行,巨坑。最后在官网找到了开启方法 原来是配置文件改了。 所以以后遇到类似情况,一定要去看官网文档,mysql经常在新版本搞变化
Updated example for 2015 MySQL 5.6:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 10
log_queries_not_using_indexes = 1
Change permissions so that mysqld can write to the specified log file. Giving write permissions to the 'other' group should suffice.
使用mysql自带命令mysqldumpslow查看
./mysqldumpslow -s at -t 20 /opt/lampp/var/mysql/slow.log
常用命令
-s ORDER what to sort by (t, at, l, al, r, ar etc), 'at’ is default
-t NUM just show the top n queries
-g PATTERN grep: only consider stmts that include this string
s,是结果的顺序,说明写的不够详细,俺用下来,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序 -t,是top n的意思,即为返回前面多少条的数据 -g,后边可以写一个正则匹配模式,大小写不敏感的
mysqldumpslow -s c -t 20 host-slow.log
mysqldumpslow -s r -t 20 host-slow.log
上述命令可以看出访问次数最多的20个sql语句和返回记录集最多的20个sql。
mysqldumpslow -t 10 -s t -g "left join" host-slow.log
这个是按照时间返回前10条里面含有左连接的sql语句。