1.查看容器
docker ps
2.进入容器
docker exec -it 7b7b345abeb6 /bin/bash
有两种修改方法,一种是通过sql语句(mysql重启后失效),另外一种是修改配置文件(永久有效)
方法一:通过sql语句
1.登入mysql
mysql -u root -p
#然后输入密码
2.查看是否开启了慢查询日志、设置的阈值、慢查询日志的存放位置
show variables like 'slow%';
#不同版本会有区别所以也可以使用第二种方法查看(两个百分号%)
show variables like '%slow%';
如图所示,并未开启慢查询 slow_query_log为OFF
3.开启慢查询日志,设置阈值
#开启慢查询
set global slow_query_log = ON;
#修改慢sql的阈值,sql执行超过阈值的时候就会记录到慢日志的log文件中。
set global slow_launch_time = 3;//根据需要设置秒数
4.退出mysql,查看慢查询日志
#退出mysql
exit
#查看慢查询日志
cat -n /var/lib/mysql/7b7b345abeb6-slow.log
方法二 : 修改mysql配置文件
- 编辑mysql配置文件(如果提示命令不存在,按照步骤2安装vim)
vim /etc/mysql/my.cnf
- 安装vim
#更新数据源列表 apt-get update #安装vim apt-get install vim
- 修改my.cnf配置文件,在[mysqld]下的下方加入
[mysqld] slow_query_log = ON slow_query_log_file = /var/lib/mysql/tmp_slow.log //linux long_query_time = 1
- 重启mysql容器
#先退出容器 exit #关闭,重启容器 docker kill 7b7b345abeb6 docker start 7b7b345abeb6 #进入容器 docker exec -it 7b7b345abeb6 /bin/bash
- 查看慢查询日志
#方法一直接查看 cat -n /var/lib/mysql/7b7b345abeb6-slow.log #方法二通过mysql自带的工具查看, 显示出慢查询日志中最慢的10条sql mysqldumpslow -t 10 /var/lib/mysql/7b7b345abeb6-slow.log #方法三 详细的sql情况(方法二的详细版) mysqldumpslow -a -s t -t 10 /var/lib/mysql/7b7b345abeb6-slow.log #方法四 得到访问次数最多的10个SQL mysqldumpslow -s c -t 10 /var/lib/mysql/7b7b345abeb6-slow.log #方法五 得到按照时间排序的前10条里面含有左连接的查询语句。 mysqldumpslow -s t -t 10 -g "left join" /var/lib/mysql/7b7b345abeb6-slow.log #方法六 得到返回记录集最多的10个SQL。 mysqldumpslow -s r -t 10 /var/lib/mysql/7b7b345abeb6-slow.log #方法七 可以配合more命令使用 mysqldumpslow -s r -t 10 /var/lib/mysql/7b7b345abeb6-slow.log | more
1)mysqldumpslow还有一些其他参数,可以通过mysqldumpslow --help查看
2)mysqldumpslow能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。
mysqldumpslow语法说明: -s ,按照什么方式起来排序。默认at,也就是按照平均查询时间来排序。都是按照倒序排列。 al: average lock time 平均锁定时间 ar: average rows sent 平均返回行数 at: average query time 平均查询时间 c: count 总执行次数 l: lock time 总锁定时间 r: rows sent 总返回行数 t: query time 总查询时间 -t ,show the top n queries,显示前多少名的记录 -a ,默认不开启这个选项。mysqldumpslow将相似的SQL的值(字符串或者数字)替换为N,开启该选项,则显示真实值。不开启该选项,有点类似于Oracle的绑定变量的记录。 -g ,类似于grep命令,过滤出需要的信息。如,只查询A表的慢查询记录。 -l ,总时间中包含锁定时间
后记:如果慢查询日志文件太大,清理方案.
1.先关闭慢查询日志(参考开头的方法)
2.修改慢查询日志原文件名称
mv 7b7b345abeb6-slow.log 7b7b345abeb6-slow.log.bak
3.创建新的慢查询日志文件
touch 7b7b345abeb6-slow.log
新文件的创建者(所属人)不是mysql并且文件所属的用户组不是mysql会导致,mysql无法写入日志文件报错.解决方法
#1.查询原文件所属人和所属组,文件的读写权限
ls -l 7b7b345abeb6-slow.log.bak
#2.修改文件的所属人
chown mysql 7b7b345abeb6-slow.log
#3.修改文件的所属组
chgrp mysql 7b7b345abeb6-slow.log
#4.文件读写权限相同,无需修改
4.重新开启慢查询日志