您的位置:首页 > 数据库 > MySQL

MySQL日志功能

2015-07-22 11:28 597 查看
MySQL的日志有很多种,分为错误日志、一般查询日志、慢查询日志、二进制日志、中继日志、事务日志,这些日志信息有很强大的功能,错误查询、查询诊断、复制、数据恢复、保持事务性质等都依靠日志完成;所以日志文件从性能和数据安全方面考虑,都不应该和数据文件存放在同一个存储设备上,且考虑到IO问题日志文件应存在性能高的存储设备上
下面是日志的相应功能和常用相关变量
错误日志
作用:
服务器启动和关闭过程中的信息

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

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

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

警告信息

相关变量:
log_error #默认记录文件路径,数据目录下的本机名.err

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

一般查询日志
作用:将一般查询操作的所有信息都记录下来
相关变量
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: