一、MariaDB日志文件概述

  1.查询日志:qurey log

       一般该日志功能不开启,会记录每条查询语句在高并发情况下IO压力大。

    参数:

        1)是否启用查询日志:general_log = {ON|OFF}

        2)日志文件记录位置(相对路径、绝对路径)general_log_file = HOSUNAME.log

        3)日志文件输出方式(表、文件)log_output = {TABLE|FILE|NONE}

 

  2.慢查询日志:slow qurey log

         一般启用,查询执行时长超过指定时长的查询操作所记录日志。造成慢查询原因:查询语句执行慢需要调用资源多、查询所依赖的表被锁定阻塞住了

    参数:

        1)查看慢查询时长:SHOW GLOBAL VARIABLES LIKE 'long_query_time';或者SELECT @@GLOBAL.long_query_time;

        2)设置慢查询时长:SET GLOBAL long_query_time=  ;

MySQL系列:日志文件_第1张图片

        3)是否启用慢查询日志slow_query_log = {ON|OFF}

        4)日志文件路径:slow_query_log_file=  HOSATNAME-slow.log    

       默认是相对路径和命名方式,也可以写成绝对路径 /path/to/somefile: 日志文件路径

        5)过滤器:log_slow_filter =  

 admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk

全连接、全表扫描、查询缓存、查询缓存未命中、临时表、在磁盘上的临时表….

       6)是否记录慢查询日志:log_slow_queries =

        7)记录的速率:log_slow_rate_limit =

        8)详细级别:log_slow_verbosity =  

 

  3.错误日志:error log

     记录错误时的日志、也记录服务启动或关闭时的正常信息。不完全是错误信息,默认不开启,但是在CentOS 7发行商版本的MariaDB的错误日志是开启的。

        (1)mysqld启动和关闭过程中输出的信息

        (2)mysqld运行中产生的错误信息

        (3)event scheduler运行一个event时产生的日志信息;

        (4)在主从复制架构中的从服务器上启动从服务器线程时产生的日志信息;

    参数:

          log_error = /path/to/somefile      yum安装位置在/var/log/,编译安装后不在可以自己指定

          log_warnings = {ON|OFF}:是否记录警告信息于错误日志中;

 

  4.中继日志:reley log

     MySQL复制架构中用到的日志

    复制架构中,从服务器用于保存从主服务器的二进制日志中读取到的事件

 

  5.事务日志(innodb存储引擎):transaction log

    支持事务存储引擎的支持ACID测试时所依赖的文件(ACID, 随机I/O转换为顺序I/O)。事务性存储引擎自行管理和使用,可以根据读取事务日志后回滚操作,自动恢复崩溃

 

  6.二进制日志:binary log

      以二进制格式记录接收的查询语句中有可能引起数据发生改变的语句,备份恢复、扩展功能中的复制等基于此日志

 

 

 

二、二进制日志详解

  1.概述

    (1)记录导致数据改变或者潜在导致数据改变的SQL语句

    (2)二进制文件是自动滚动的,关闭后再启动,后自动向后增加,每次只会使用一个二进制文件

    (3)用于通过"重放"日志文件中的时间来生成数据副本

    (4)日志保存形式:数据库所在目录下的mysql-XXXXXX文件;例如RPM包安装的位置/var/lib/mysql/mysql-bin.000001

  该日志文件时自动滚到的,使用中的十种为一个文件

[root@localhost ~]# file mysql-bin.000001

mysql-bin.000001:MYSQL replication log          # 文件类型:mysql的复制日志

 

  2.二进制日志文件的构成:

      日志文件:文件名前缀.文件名后缀   mysql-bin.000001  二进制格式

      索引文件:文件名前缀.index  mysql-bin.index  文本格式记录多少个二进制文件在使用

 

  3.查询二进制日志

SHOW MASTER STATUS;:查看时正在使用中的二进制日志文件

SHOW {BINARY | MASTER} LOGS:查看主服务器端处于由mysqld维护状态中的二进制日志文件;

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]:显示指定的二进制日志文件中的相关事件

       示例

MariaDB [(none)]>  SHOW BINLOG EVENTS IN 'mysql-bin.000003';

Log_name:日志文件名

Pos:该事件起始位置

Evevt_type:记录的事件类型,例如:Format_desc

Server_id:在什么服务器上执行的在主从结构中服务器的id是全局唯一

End_log_pos:事件结束后的下一个位置(下一个文件起始位置)

Info:事件详细信息

 

  4.日志记录格式

  statement基于"语句"记录,记录查询语句

  row基于""记录,记录数据精确,有较大的数据量

  mixed"混合"模式 ,让系统自行判定该基于那种方式进行;

 

  5.二进制日志配置相关服务器变量

        sql_log_bin = ON:是否记录二进制日志

        log_bin = /path/to/somefile:记录的文件位置,通常为ON

        binlog_format = STATEMENT|ROW|MIXED:二进制文件记录的格式

        max_binlog_size = 1073741824:单个二进制文件体积的最大值,默认为1073741824字节,1G

          注意:

    1) 到达最大值后会自动滚动,日志文件可能小于或者大于此数值就滚动,达到上限的大小未必为指定值

    2) 二进制日志文件的单文件上限;

        max_binlog_cache_size = 18446744073709547520:二进制日志文件语句缓存的最大值     

        max_binlog_stmt_cache_size = 18446744073709547520 

   说明:缓存二进制日志事件中的语句大小,异步写入;一个设定记录行,一个设定记录语句

        expire_logs_days =  0 :日志的超时时长,不启用根据事件自动清理的功能

        sync_binlog = 0:设定是否启用二进制日志同步功能;0表示不同步;任何正值都表示记录多少个语句后同步一次;

 

  6.mysqlbinlog二进制文件查看工具

      .../mysql/bin/mysqlbinlog用于:客户端命令工具,基于mysql协议远程连接到,分析二进制文件;直接指明二进制文件日志位置即可查看到内容

     二进制日志的查看命令:mysqlbinlog [OPTIONS] log_file

-j, --start-position=#从指定的事件位置查看,起始位置

--stop-position=#:只显示到指定的事件位置,结束位置

--start-datetime=  :开始的时间

--stop-datetime= :结束的时间

           时间格式:YYYY-MM-DD hh:mm:ss

 

  7.二进制日志的格式

# at 19364

#140829 15:50:07 server id 1  end_log_pos 19486         Query        thread_id=13        exec_time=0        error_code=0

SET TIMESTAMP=1409298607/*!*/;

GRANT SELECT ON tdb.* TO tuser@localhost

/*!*/;

事件的起始位置:(at 19364)

事件发生的日期和时间(140829 15:50:07)

事件发生在服务器的标识(server id)

事件的结束位置(实际上是下一时间开始的位置):(end_log_pos 19486)

事件的类型:(Query)

事件发生时所在的服务器执行此事件的线程的ID:(thread_id=13)

语句的时间戳与将其写入二进制文件中的时间差(语句执行时长):(exec_time=0)

错误代码:(error_code=0)

事件内容:SET TIMESTAMP=1409298607/*!*/;

GRANT SELECT ON tdb.* TO tuser@localhost

/*!*/;

    注意:

mysql 5.6版本    mariadb 10版本及以上:

GTID事件专属:全局事务id号;Global Transaction ID;集群运行时事务的全局唯一ID

事件所属的全局事务的GTID:(GTID 0-1-2)