mysql的日志结构(5.6.21)

MySQL的日志结构相对来说比比较复杂一些,主要有error log(错误日志),binary log(二进制日志), general query log( 一般查询日志), slow query log( 慢查询日志),InnoDB redo 日志(InnoDB redo 日志),下面我们分别从这些日志的作用,以及相关的一些参数两个方面来看一下这些日志。

1.错误日志

a.作用
错误日志记录MySQL的启动关闭时的信息,以及在运行期间一些重大的错误,当MySQL发现一张表需要自动检查和修复的时候,也会写一条错误信息到错误日志中。
在启动的时候你可以指定--log-file参数(也可以在my.cnf中指定),这个参数就是指明错误日志的存放目录。如果启动的时候没有指定这个参数,配置文件中也没有这个参数,那么MySQL就使用默认的值,默认在为datadir/host_name.err
b.相关参数
log_error
这个参数就是指定错误日志的存放位置以及名字,这个参数可以在my.cnf中指定通过log_error这个参数指定,也可以在启动时使用--log-error这个参数选项来启动。

2.二进制日志(binary log)

a.作用
包含所有更新数据的语句,也包含所有潜在更新数据的语句,比如删除数据,但是没有与条件相匹配的行。任何不更新数据的语句不会记录在其中。更新语句运行的时间也会记录在二进制日志中(不包含申请锁和发送的时间)。因为二进制日志记录了在上次备份以来所有的更新语句,所以在数据库回复的时候,可以将数据回复到尽可能新的状态。另外二进制日记还用于MySQL数据库的主主复制和主从复制的环境中。
b.相关参数
在默认情况下,MySQL是不开启可以在用mysqld启动,或者mysqld_safe启动的时候指定下面的参数选项
--log-bin=[file_name]        如果只指定文件名,而没有路径则是在$datadir目录下
--log-bin-index=[file_name]   记录的是就是目前系统中产生的--log-bin的文件名称,如果只指定名而没有路径,则默认是在$datadir目录下
--max-bin-log-size        二进制日志的最大空间
--bin-do-db=[db_name]        记录那个数据库的二进制日志
--bin-ignore-db=[db_name]        不记录那个数据库的二进制日志
例:mysqld --defaults-file=/opt/mysql/my.cnf --log-bin=mysql.000001 --log-bin-index=mysql.index --user=mysql --max-binlog-size=10m
上面的参数也可以在my.cnf配置文件中配置,相关参数如下,作用也与上面的参数相同
log_bin        用show binary logs 或者show master logs可以查看当前系统的日志文件名称。如果想查看记录在二进制日志中的内容,则需要用MySQL提供的mysqlbinlog工具来查看。如果想切换日志(像Oracle中的alter system switch logfile)使用命令:flush logs;或者mysqladmin flush-logs
binlog_cache_size 为每个连接的线程分配多少日志缓存
max_binlog_cache_size
max_binlog_size            二进制日志文件的最大值,但是在实际的情况中,日志文件的大小可能会大于这个值,因为一个事物的二进制日志只能写在一个二进制日志文件中
binlog_cache_use    当前缓存的事物所用的缓存空间(show status like 'binlog%')
binlog_cache_disk_use 磁盘缓存
binlog_do_db
binlog_ignore_db
binlog_format        记录binlog格式statement(default),row,mixed(改变相应的参数,然后使用mysqlbinlog工具查看来验证)
sync_binlog    设置事物提交的频率(设置为0时,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘,设置为n时,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。诚然,设置为0时性能是最好的,但是安全性不是很高,当设置为1时安全性最高,但是性能最差,往往性能和安全性不能兼得)
expire_logs_days        设置二进制日志过期的时期(在每次日志切换的时候会去删除过期的二进制日志)

3.一般查询日志(general query log)

a.作用
一般查询日志就是把从客户端接收的所有命令,以接收的顺序将其记录在案。这个日志对性能的影响比较大,毕竟将所有的命令都记录了下来,所以使用时务必小心。而且一般在生产环境中是不建议开启的,只有在想知道哪些客户端命令对数据库造成错误或者性能影响时才暂时开启。
b.相关参数
general_query_log    0为关闭,1为开启(set global general_query_log=1)
general_query_log_file    存放一般查询日志的路径和文件名,默认是在$datadir/host_name.log
query_cache_size 
query_alloc_block_size

4.慢查询日志

a.作用
慢查询日志就是将超过long_query_time 设置的时间的查询记录在日志中,可以在数据库性能调优的时候打开慢查询日志,来抓取运行时间比较长的语句。
b.相关参数
long_query_time        设置多长时间则界定为慢查询语句
slow_query_log        设置慢查询日志是否开启(0:开启(默认),1:开启)
slow_query_log_file    设置慢查询日志的位置和名字,默认为$datadir/host-slow.log

5.innodb redo日志

a.作用
因为InnoDB是支持事物的存储引擎,所以它就像Oracle的redo日志一样,是为了保护数据库的一致性。如果对Oracle的原理比较清楚的话这个就非常好理解,基本和Oracle的redo日志是一样的。这里也就不再赘述,如果详细说的话也非常庞大。下面主要来看一下相关的参数。
b.相关参数
innodb_log_buffer_size        日志缓存区大小
innodb_log_file_size        日志文件的大小(默认48M)
innodb_log_files_in_group        日志文件组的个数
innodb_log_group_home_dir        日志文件目录(默认为$datafir/ib_logfile0,ib_logfile1)
innodb_os_log_written          多少日志写入到日志文件,查看日志生成的频率(show status like 'innndb_os_log%')
innodb_os_log_fsyncs         往磁盘上写日志的次数( show status like 'innndb_os_log%')
innodb_flush_log_at_trx_commit      0:日志缓冲每秒一次地被写到日志文件中,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。1:在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新(默认)。2:在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新,对日志文件每秒刷新一次。  默认值1的意思是每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于很多运用,特别是从MyISAM表转过来的是可以的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。设成0会更快一点,但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28687558/viewspace-1340913/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28687558/viewspace-1340913/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值