如何使用MySQL中的慢查询日志启用,使用和分析?

时间:2016-04-24 06:45:28

标签: mysql database logging mysql-slow-query-log log-analysis

以下问题将得到解答。

  1. 如何在MySQL中启用慢速查询日志
  2. 如何设置慢查询时间
  3. 如何阅读MySQL生成的日志
  4. 日志分析日益成为一种威胁。大多数科技公司已开始使用ELK堆栈或类似工具进行日志分析。但是,如果你没有时间花在设置ELK上而只是想花一些时间来分析日志(手动,那就是),那该怎么办呢。

    虽然这不是最好的方法,但不要低估从终端分析日志的能力。从终端,我们也可以有效地分析日志,但我们能做什么或不能做什么都有限制。我发布了有关分析MySQL日志的基本过程。

2 个答案:

答案 0 :(得分:2)

(除了@MontyPython提供的'setup')

运行 pt-query-digestmysqldumpslow -s t

要么先给出“最差”查询的详细信息,要么在几十行之后停止输出。

我更喜欢long_query_time=1。这是几秒钟;你可以指定小于1。

此外,在更新的版本中,您需要log_output = FILE

答案 1 :(得分:1)

show variables like '%slow%';

+---------------------------+-----------------------------------+
| Variable_name             | Value                             |
+---------------------------+-----------------------------------+
| log_slow_admin_statements | OFF                               |
| log_slow_slave_statements | OFF                               |
| slow_launch_time          | 2                                 |
| slow_query_log            | OFF                               |
| slow_query_log_file       | /var/lib/mysql/server-slow.log    |
+---------------------------+-----------------------------------+

然后,

show variables like '%long_query%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 5.000000 |
+-----------------+----------+

将长查询时间更改为您想要的任何内容。在慢查询日志中将捕获超过此值的查询。

set global long_query_time = 2.00;

现在,打开慢速查询日志。

set global slow_query_log = 'ON';

flush logs;

转到终端并检查日志文件所在的目录。

cd /var/lib/mysql/

la -lah | grep slow

-rw-rw----  1 mysql mysql 4.6M Apr 24 08:32 server-slow.log

打开文件 - 使用以下命令之一

cat server-slow.log
tac server-slow.log
less server-slow.log
more server-slow.log
tail -f server-slow.log

一天中记录了多少个独特的慢查询?

grep 'Time: 160411.*' server-slow.log | cut -c2-18 | uniq -c