码迷,mamicode.com
首页 > 数据库 > 详细

MySQL日志功能

时间:2015-07-22 16:38:55      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:mysql;日志

  MySQL的日志有很多种,分为错误日志、一般查询日志、慢查询日志、二进制日志、中继日志、事务日志,这些日志信息有很强大的功能,错误查询、查询诊断、复制、数据恢复、保持事务性质等都依靠日志完成;所以日志文件从性能和数据安全方面考虑,都不应该和数据文件存放在同一个存储设备上,且考虑到IO问题日志文件应存在性能高的存储设备上

  下面是日志的相应功能和常用相关变量


错误日志

作用:

  • 服务器启动和关闭过程中的信息

  • 服务器运行过程中的错误信息

  • 事务调度器event scheduler运行事件时产生的信息

  • 从服务器启动和停止进程时产生的信息

  • 警告信息

相关变量:

  • log_error #默认记录文件路径,数据目录下的本机名.err

  • log_warnings={0|1} #1记录警告信息,2不记录


一般查询日志

作用:将一般查询操作的所有信息都记录下来

相关变量

  • general_log={ON|OFF} #是否启用查询日志 # 默认应关闭,否则所有查询都记录产生大量的IO

  • general_log_file #默认记录文件路径:数据目录下的本机名.log

  • log #是否将除查询意外的所有操作都做记录(mysql5.6之后不再使用这个变量)

  • log_output={TABLE|FILE|NONE} #日志输出成表、文件、不记录


慢查询日志

作用

  • 和一般查询日志差不多,只是记录查询时间长超出long_query_time变量定义的时间的查询信息,记录哪些查询比较慢;可用于查询性能诊断,通过分析慢查询日志,进行查询优化

相关变量

  • log_slow_queries={YES|NO} #是否记录慢查询

  • slow_query_log={YES|NO} #和上个变量重复

  • slow_query_log_file #默认记录文件路径:数据目录下的本机名-slow.log

  • long_query_time 

  • log_output:{TABLE|FILE|NONE}


二进制日志(mysqlbinlog)

作用

  • 记录任何可能引起或引起数据库变化的操作如DML,DCL、授权语句等,利用此日志可以实现mysql复制即时点恢复的依据(按照某个时间点、某个位置还原)

文件特性

  • 二进制日志会发生滚动,手动滚动,FLUSH LOGS;

  • 命名:mysql-bin.000001按后面数值每滚动一次增加1并生成新的文件

事件记录格式

  • 基于语句(statement):记录的是操作语句

  • 基于行(row):记录的是改变的数据

  • 混合方式(mixed):两种混合

事件如何记录

  • 产生时间(starttime)

  • 相对位置(position):上一个事件结束位置,也是当前事件的开始位置

二进制日志文件相关操作

  • 查看当前所有的二进制日志文件 # SHOW BINARY LOGS;

  • 查看当前在用哪一个 # SHOW MASTER STATUS; 同时还可看到position

  • 查看二进制日志文件详细信息 # SHOW BINLOG EVENT IN ‘mysql-bin.000001’;

  • 删除 # PURGE BINARY LOGS TO ‘某二进制日志文件’ ; 删除这个之前的所有二进制日志文件

  • 实现滚动 # FLUSH LOGS;

  • 读取二进制文件内容 # mysqlbinlog mysql-bin.000005 --{start|stop}-{datetime|position}

相关变量

  • binlog_format={STATEMENT|RAW|MIXED} # 事件记录格式

  • log_bin # 二进制日志是否开启

  • sql_log_bin # 控制二进制日志信息是否记录进文件

  • sync_binlog # 多久同步一次二进制日志到磁盘中,0不同步,正数值表示多少次写操作后同步一次,autocommit为1时,每条语句自动同步 用于控制同步行为


中继日志

作用

  • 格式和二进制日志差不多,是从主服务器的二进制日志文件中复制而来的事务信息,并保存为的日志文件,实现mysql主从复制;从中继日志当中读取操作内容,在本地数据库上执行相同的操作


事务日志:支持事务的存储引擎才有事务日志,如InnoDB

作用

  • 事务日志是保证ACID的重要依据,记录了提交的事务,并后续写如数据库文件当中

日志组

  • 一般事务日志文件有多个,若其中一个满了,但还没有同步进数据库文件中怎么办,所以需要多个,ib_logfile0、ib_logfile1、......

事务的同步

  • 事务从用户空间缓存同步到内核空间缓存,缓存是因为若每个事务都直接同步到日志文件中产生频繁的IO操作,但缓存过大会造成故障数据丢失量大,所以应折中选择缓存大

  • 事务从缓存同步到事务日志文件

  • 从日志文件同步进数据库文件

重要的变量innodb_flush_log_at_trx_commit={0|1|2}

  • 0:每秒同步,并flush

  • 1:每事务同步,并flush

  • 2:每事务同步,不执行flush,由系统决定flush时间

  • 这里的同步表示将用户空间缓存同步到内核空间,flush表示事务缓存同步到日志文件中

二进制日志和事务日志区别:

  • 二进制日志文件为了实现当数据库崩溃故障的时候,用于数据还原的

  • 而事务日志为了保证事务本身的可靠性,保证ACID的





本文出自 “Call me Boxin” 博客,请务必保留此出处http://boxinknown.blog.51cto.com/10435935/1677016

MySQL日志功能

标签:mysql;日志

原文地址:http://boxinknown.blog.51cto.com/10435935/1677016

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!