MySQL日志分析

一、MySQL日志简介

(一)、mysql日志的种类,一般来说,日志有五种,分别为:

  1. 错误日志:log_error (记录启动,运行,停止mysql时出现的信息)
  2. 二进制日志:log_bin (记录所有更改数据的语句,还用于复制,恢复数据库用)
  3. 通用查询日志:general_log (记录建立的客户端连接和执行的语句)
  4. 慢查询日志: log_slow_queries (记录所有执行超过long_query_time秒的所有查询)
  5. 更新日志: log_update (二进制日志已经代替了老的更新日志,更新日志在MySQL 5.1中不再使用)

(二)、 查询当前日志记录的状况:

  1. mysql>show variables like ‘%log%’;(查看是否启用了日志)
  2. mysql> show master status;(怎样知道当前的日志)
  3. mysql> show master logs;(显示二进制日志的数目)

(三)、MySQL日志状态图示

  1. 错误日志(默认开启)

MySQL日志分析_第1张图片

  1. 二进制日志

MySQL日志分析_第2张图片

  1. 通用查询日志

MySQL日志分析_第3张图片

  1. 慢查询日志

MySQL日志分析_第4张图片

二、MySQL日志分类

(一)、错误日志

  1. 说明:错误日志默认是启用的,一般存放在数据目录下,如无特别指定,默认以 $HOSTNAME.err 为文件名称。错误日志中除了记录错误相关的信息之外,默认还记录 MySQL 初始化、启动和关闭过程中输出的信息(未必是错误信息)、event scheduler 运行时所产生的信息、主从架构中的从 I/O Thread 的信息,还包括服务器运行过程中所发生的任何严重的错误信息。通常,当数据库出现问题不能正常启动,应当首先想到的就是查看错误日志。从中可以看到此日志文件记录的MySQL数据库启动和关闭信息。

  2. –log-error=[file-name]用来指定错误日志存放的位置。
      如果没有指定[file-name],默认hostname.err(hostname为主机名)做为文件名,默认存放在DATADIR目录中。也可以将log-error配置到my.cnf文件中,这样可省去每次启动mysqld时都手工指定–log-error.

     在mysql配置文件my.ini中添加:
         log-error = D:\ProgramFiles\MySQL\mysqld.err
     如果执行了FLUSH LOGS,错误日志文件将被命名为后缀old文件,并且会创建一个新的空文件。
     
     错误日志文件的格式:
           时间  [错误级别]  错误信息
    
  3. MySQL客户端可以通过下列方法来获取错误日志的详细位置:

    mysql> show variables like ‘log_error’;
    ±---------------------±------------------------------------------------------+
    | Variable_name | Value                |
    ±---------------------±------------------------------------------------------+
    | log_error    | D:\ProgramFiles\MySQL\Data\jevo.err |
    ±----------------------±-----------------------------------------------------+

    1 row in set (0.00 sec)

  4. 错误日志-记录级别

    错误日志文件的记录级别:
    	错误日志有3个level等级:error、warning 和information。
    

(二)、二进制日志

  1. 二进制日志主要用来记录操作MySQL数据库中的写入性操作(增删改,但不包括查询),相当于sqlserver中的完整恢复模式下的事务日志文件。

  2. 二进制日志的作用:1、用于复制,配置了主从复制的时候,主服务器会将其产生的二进制日志发送到slave端,slave端会利用这个二进制日志的信息在本地重做,实现主从同步。2、用户恢复,MySQL可以在全备和差异备份的基础上,利用二进制日志进行基于时间点或者事物Id的恢复操作。原理雷同于主从复制的日志重做。

  3. 开启二进制日志:开启二进制日志需要指定一个log-bin参数的路径,比如:log_bin="D:\phpStudy\MySQL\mysql_log\log_bin"。开始二进制日志之后会自动生成一个管理二进制日志的log_bin_index文件。log_bin选项也显示为on,即开启了二进制日志。

  4. MySQL客户端可以通过下列方法来获取二进制日志的详细位置:

    mysql> show variables like ‘log_bin’;
    ±---------------------±----------------+
    | Variable_name | Value    |
    ±---------------------±-----------------+
    | log_bin    | ON    |
    ±----------------------±----------------+
    1 row in set (0.00 sec)

(三)、通用查询日志

  1. 通用查询日志主要记录建立的客户端连接和执行的语句,MySQL中的参数general_log用来控制开启、关闭MySQL查询日志,参数general_log_file用来控制查询日志的位置。所以如果你要判断MySQL数据库是否开启了查询日志,可以使用下面命令。general_log为ON表示开启查询日志,OFF表示关闭查询日志。
  2. 开启查询日志-在my.ini(windows系统)或my.cnf(linux系统)中添加一下内容:
		#通用查询日志-开启
		general_log=on
		#通用查询日志-日志存储目录
		general_log_file="D:\phpStudy\MySQL\mysql_log\general_log.log"
  1. MySQL客户端可以通过下列方法来获取查询日志的详细位置
    mysql> show variables like ‘%general_log%’;
    ±--------------------±---------------------------------------+
    | Variable_name | Value            |
    ±---------------------±--------------------------------------+
    | general_log  | ON           |
    | general_log_file | /var/lib/mysql/DB-Server.log |
    ±----------------------±--------------------------------------+
    2 rows in set (0.00 sec)

(四)、慢查询日志

  1. MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

  2. 慢查询设置的相关参数

    slow_query_log    :是否开启慢查询日志,1表示开启,0表示关闭。
    log-slow-queries  :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
    slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log
    long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。
    log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。
    log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。
    log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。
    
  3. 注意:找到mysql的安装目录,找到my.ini文件夹在[mysqld]处加入以下代码开启慢查询,永久有效。

    #开启慢查询
    slow_query_log = ON
    #log-slow-queries:代表MYSQL慢查询的日志存储目录,此目录文件一定要有写权限;
    #最长执行时间 (查询的最长时间,超过了这个时间则记录到日志中) .
    long_query_time = 5
    #慢查询日志存储方式
    log_output='FILE'
    log-slow-queries="C:/Program Files (x86)/MySQL/MySQL Server 5.0/log/mysql-slow.log"
    #没有使用到索引的查询也将被记录在日志中
    log-queries-not-using-indexes = ON
    

三、修改MySQL配置参数-日志参数

(一)、动态修改(临时修改,重启失效)

  1. 说明:静态变量不能修改,但是可以修改全局变量。
  2. 通用查询日志
	#临时开启通用查询日志
	mysql > set global general_log=on;
	
	#临时设置通用查询日志文件目录
	mysql > set global general_log_file='/tmp/mariadb_general_log.log';
	
	#临时关闭通用查询日志
	mysql > set global general_log=off;

	#把日志直接存放到表里面
	mysql > set global log_output='table';
  1. 慢查询日志
	#临时开启慢查询日志
	mysql> set global slow_query_log='ON'; 
	#或
	mysql> set global slow_query_log=1;

	#查询超过4秒就记录
	mysql> set global long_query_time=4;
	
	#设置慢查询日志存放的位置
	mysql> set global slow_query_log_file='/usr/local/mysql/data/slow.log';	

(二)、永久修改

1、说明
  在配置文件中(my.ini或my.cnf)添加配置信息后,重启MySQL后就是永久修改,永久生效。直到再次修改配置信息并重启MySQL为止。

你可能感兴趣的:(MySQL,日志,慢查询日志)