简述
网站数据达到一定的数量级,就会有页面卡,出现50x等各种问题,mysql服务器CPU居高不下等症状。因为sql缓慢导致php缓慢,导致超时。这个时候应该先从mysql入手。就像看病一样,要先找病根,记录慢查询日志,就是观察期,观察到迹象我们就可以对症下药了。
配置参数说明
主要靠三个参数来配置,我们用通俗的话来解释。
开关(不多说,关闭就不记录了)
slow_query_log
log存储位置(记录下来,我得知道你在哪吧,一般将它存放到mysql数据目录,也就是和你创建的数据库在同级目录)
slow_query_log_file
超时时间 (我得让你知道多慢我忍不了)
long_query_time
设置方法
方法一:全局变量设置
将 slow_query_log 全局变量设置为“ON”状态
mysql> set global slow_query_log='ON';
设置慢查询日志存放的位置(默认在 mysql data 目录下)
mysql> set global slow_query_log_file='slow.log';
记录超时1秒的sql语句
mysql> set global long_query_time=1;
注意:无需重启即可生效,但重启会失效。set global 改的参数是暂时的,想重启不变请配合修改mysql配置文件。
方法二:配置文件设置
修改配置文件my.cnf(Windows 下是my.ini),在[mysqld]下的下方加入
slow_query_log = ON
slow_query_log_file = slow.log
long_query_time = 1
注意:修改配置文件之后需要重启mysql服务。
查看设置后的参数
mysql> show variables like 'slow_query%';
+---------------------+----------+
| Variable_name | Value |
+---------------------+----------+
| slow_query_log | ON |
| slow_query_log_file | slow.log |
+---------------------+----------+
2 rows in set
mysql> show variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set
测试生成log
mysql> select sleep(2);
从log文件中发下慢查询
# Query_time: 2.062500 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
use test;
SET timestamp=1515638101;
select sleep(2);
重新生成log文件
有时候log文件过大需要清空,直接删除log文件,本以为下次再有慢查询会自动生成文件并记录,其实并不会生成。当然重启mysql是可以生成的,但是生产环境重启mysql一定要慎重,不到万不得已不要重启mysql。在删除log文件之后,重新生成log文件需要运行 flush logs 命令。
mysql> flush logs;
Query OK, 0 rows affected
好了,mysql记录慢查询的步骤就这些了,通过记录慢的 sql 语句来开始你的优化之旅吧!