标签: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;日志
原文地址:http://boxinknown.blog.51cto.com/10435935/1677016