MySQL日志分类及性能分析你应该知道的知识

MySQL日志记录了MySQL数据库日常操作和错误信息,MySQL总共有四种类型的日志,通过分析这些日志可以查询到MySQL的运行情况、用户操作、错误信息等,可以为MySQL的管理和优化提供必要信息。

 1、日志类型

    MySQL总共有四种类型的日志,如下:

  • 错误日志:记录Mysql服务的启动、运行或停止MySQL服务时出现的问题,默认开启
  • 查询日志:记录建立连接的客户端连接和执行的语句。
  • 二进制日志:记录所有更改数据的语句,可以用于数据复制
  • 慢查询日志:记录所有执行时间超过设定时间(long_query_time)的查询

    四种日志,仅错误日志默认开启,其他需要手动配置开启,启动日志会降低服务器性能、而且会占用大量磁盘空间

什么是刷新日志?

刷新日志可以强制MySQL关闭旧的日志文件,重新打开新的日志文件 即切换到新的日志文件,例如:错误日志当手工删除后无法重新建立新的日志文件,则需要进行刷新日志操作才会重新创建日志文件。

如何操作?
可在服务器端执行:
mysqladmin -u root -p flush-logs
或在客户端执行
flush logs

2、二进制日志

    1、原理介绍

    二进制日志主要记录MySQL数据库的变化,主要运用场景为 MySQL replication ,例如主从复制,主主复制,环形复制(不常用),从机通过IO线程读取主机的二进制日志 生成自己的中继日志,然后自己的SQL线程通过中继日志进行复制数据功能,简单点说就是把SQL再执行一遍,主要原理详细如下图:

    2、开启二进制日志

    在my.cnf文件 [MySQLd]组下进行如下配置

log-bin[=path/filename]

    例如:

    log-bin

    log-bin=mysql-bin

    log-bin=/home/zhpt/logs/mysql-bin

    以上三种方式都可开启二进制日志

其他配置:

expire_logs_days=10     #自动清除过期日志的时间
max_binlog_size=100M    #设置单个二进制日志文件的大小,默认为1G,不能设置超过1G或小于4096B

    3、查看二进制日志及其设置

show variables like 'log_%'

        结果如下:

   也可使用

show binary logs

查看二进制日志文件的个数及文件名,如下图:

3、错误日志

    MySQL错误日志记录了MySQL服务在运行中发生的任何严重错误信息,此错误类型默认开启。

    1、查看日志文件配置

show variables like 'log_error%'

    结果如下所示:

    2、修改日志文件路径

        在my.cnf文件 [MySQLd]组下进行如下配置

log-error=/home/zhpt/logs/MySQL_Ruoli.err

     错误日志直接以文件的形式存储于磁盘上,可随时手工删除,删除后需要执行刷新日志才可生成新的错误日志。

4、通用查询日志

    在my.cnf文件 [MySQLd]组下进行如下配置 开启 通用查询日志

log[=path/filename]

 通用查询日志记录了用户的所有操作,可使用编辑工具直接查看,开启通用查询日志后,会降低数据库性能增大磁盘占用,不建议在生产环境中使用。

5、慢查询日志

    慢查询日志是MySQL提供的用来记录执行时间过长的查询语句,为数据库性能优化提供重要依据。

    1、查看慢查询日志开启状态及存储位置:

mysql> show variables like 'slow_query%';
+---------------------------+----------------------------------+
| Variable_name             | Value                            |
+---------------------------+----------------------------------+
| slow_query_log            | ON                               |
| slow_query_log_file       | /mysql/data/localhost-slow.log   |
+---------------------------+----------------------------------+

    如上所示,此台服务器已经开启了慢查询日志功能,慢查询日志文件路径也在其data目录下。

    2、查看慢查询日志超时时间

mysql> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 5.000000 |
+-----------------+-----------+

   3、开启慢查询日志

前面提到过,慢查询日志并不是默认开启的,开启慢查询可以通过如下方式:

  • 通过配置文件设置,此种修改方式为永久生效。

         在my.cnf文件 [MySQLd]组下进行如下配置,开启慢查询日志,如下:

slow_query_log = ON
slow_query_log_file =/usr/local/mysql/data/slow.log
long_query_time=2             #设置超时时间为2秒,默认为10秒
  • 通过设置全局变量设置,此种方式重启后失效。

          将 slow_query_log 全局变量设置为“ON”状态

mysql> set global slow_query_log='ON';

          设置慢查询日志存放的位置

mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';

         查询超过2秒就记录

mysql> set global long_query_time=2;

         开启记录没有使用索引的查询语句

mysql> set global log-queries-not-using-indexes = on

     4、慢查询日志分析

        

        上图是一条慢查询日志的内容,我们进行分析时主要看的就是执行信息,包括执行时间(Query_time)、发送行数(Rows_sent)、扫描行数(Rows_examined),通过降低扫描行数可以明显降低执行时间。

            如果扫描行数明显大于发送行数说明此条SQL的索引命中率很低,可以优先进行优化。

            关于降低降低扫描行数来提升查询效率最直接的例子就是MySQL的分页查询。

           具体可以另一篇文章:最快速的办法解决MySQL数据量增大之后翻页慢问题

        

猜你喜欢

转载自my.oschina.net/ruoli/blog/1625695
今日推荐