一般SQL写的很烂的话,系统一有访问量、数据一大,容易卡死,需打开慢查询分析,方法如下:
1、在/etc/my.cnf中的[mysqld]中加入如下代码:

slow-query-log = On        #开启慢查询
slow_query_log_file = /data/mysql/mysql_slow_query.log        #定义慢查询日志的路径 
log_output = FILE      #设置日志输出到文件,默认为输出到table
long_query_time = 5        #定义查过多少秒的查询算是慢查询
log_queries_not_using_indexes = ON    #记录下没有使用索引的query

重启Mysql服务即可打开慢查询日志.

2、直接在线打开不用重启服务
登录MySQL控制台执行如下设置:

set global long_query_time=5;    //设置成5秒,
set slow_query_log='ON';    //加上global
set global slow_query_log='ON';   //启用慢查询
set global log_output = 'file';  //日志输出到文件
set global slow_query_log_file='/data/mysql/mysql_slow_query.log';  //日志输出路径
show variables like "%slow%";   //查看是当前会话的变量值,没生效需要断开重新连接
show global variables like 'long_query_time';  //直接查看

设置以后查看已经打开了慢查询

mysql> show variables like "%slow%";
+---------------------------+----------------------------------+
| Variable_name             | Value                            |
+---------------------------+----------------------------------+
| log_slow_admin_statements | OFF                              |
| log_slow_slave_statements | OFF                              |
| slow_launch_time          | 2                                |
| slow_query_log            | ON                               |
| slow_query_log_file       | /data/mysql/mysql_slow_query.log |
+---------------------------+----------------------------------+
5 rows in set (0.00 sec)
mysql> show global variables like 'long_query_time'; 
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 5.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

其中:
slow_query_log 的值为ON 为开启慢查询日志,off表示关闭慢查询日志
slow_query_log_file 的值是记录的慢查询日志到文件中(默认为主机名.log)
slow_launch_time 是thread create的一个阈值,thread create的时间超过了这个值,这变量slow_launch_time的值加1.
long_query_time 指定了慢查询的阈值,即执行语句的时间若超过这个值则为慢查询语句
log_queries_not_using_indexes 如果该值是ON,则会记录所有没有利用索引来进行查询的语句,前提是slow_query_log 的值也是ON,否则,不会奏效
查询当前慢查询的语句个数:

show global status like '%slow%';

可以通过查询语句查看慢查询的语句:前提是日志输出到table

select * from mysql.slow_log;   #查询所有慢查询
select * from mysql.slow_log order by start_time desc limit 10;       #查询最新的10条慢查询
带符号 * 的表示必填项