1 链接
个人博客: alex-my.xyz
CSDN: blog.csdn.net/alex_my
2 启动与停止
- mac下mysql的操作
启动
sudo /usr/local/mysql/support-files/mysql.server start
停止
sudo /usr/local/mysql/support-files/mysql.server stop
重启
sudo /usr/local/mysql/support-files/mysql.server restart
3 开启慢查询日志
通过命令开启
查看当前开启状态
show variables like '%slow_query%';
输出:
slow_query_log = OFF slow_query_log_file = /xxx/xxx/xxx-slow.log
查看超时时间
show variables like 'long_query_time';
输出:
long_query_time = 10.000000
设置开启状态
set global slow_query_log=1
设置超时时间
set global long_query_time=5;
需要注意的是,设置完后,直接执行
show variables like 'long_query_time';
显示的仍然是原来的时候。- 重新连接,再执行
show variables like 'long_query_time';
- 改为执行
show global variables like 'long_query_time';
- 以上两个方法都可以显示修改后的超时时间。
- 重新连接,再执行
通过my.cnf开启
查看当前是使用的哪个my.cnf
ps aux | grep mysqld
如果在输出中有指定my.cnf,就是那个。
如果没有,则执行以下命令查找。mysql --help|grep 'my.cnf'
输出:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
- 按顺序查找,越靠前,优先级越高。
- 如果在优先找到的那个my.cnf,那就是了。
- 还有一种情况,那就是以上目录中都没有my.cnf文件,表示mysql启动没有加载配置文件,而是使用的默认值。
- 这个时候,可以找一个位置,创建一个my.cnf,一般在mysql的安装目录下都有一个my.default.cnf。可以将其拷贝为my.cnf。
添加慢查询日志参数
[mysqld] ... # 慢查询日志开关,ON/OFF,默认OFF slow_query_log = ON # 慢查询日志存储路径,不填写也会生成一个host_name-slow.log slow_query_log_file = /data/logs/mysql/slow_query.log # 慢查询日志阈值,超过这个时间时,就会记录起来。也可以设置为毫秒,比如0.01秒 long_query_time = 3 # 未使用索引的查询也会被记录起来, 如果代码没有优化,这个会生成很多很多日志 log_queries_not_using_indexes = ON ...
slow_query_log_file
路径一定要有可执行权限。chmod
- 在初次尝试慢日志的时候可以使用命令开启,但数据库重启后就会失效。我这边通过my.cnf开启。
- 假设
long_query_time
位5秒。 执行
SELECT SLEEP(9)
, 则会在slow_query.log中记录如下日志:Time: 170724 18:13:45 User@Host: uzonedb[uzonedb] @ [127.0.0.1] Id: 69 Query_time: 9.000228 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 SET timestamp=1500891225; SELECT SLEEP(9);
4 分析慢查询日志
- 将会使用
mysqldumpslow
工具。 - 可以使用
mysqldumpslow --help
查看参数。 - 常用参数:
- -s: 排序方式,可以有以下排序方式
- al: 平均锁定时间
- ar: 平均返回记录数
- at: 平均查询时间
- c: 计数
- l: 锁定时间
- r: 返回记录数
- t: 查询时间
- -r: 是否倒序
- -t NUM: 只显示前面NUM个数据
- -s: 排序方式,可以有以下排序方式
示例, 返回记录次数最多的10条语句
mysqldumpslow -s c -t 10 /data/logs/mysql/slow_query.log