赞
踩
它们分工是不同的。binlog用来做数据归档,但不具备崩溃恢复的能力,也就是说如果系统突然崩溃,重启后可能会有部分数据丢失。
innodb将所有对页面的修改操作写入一个专门的文件,并在数据库启动时从此文件进行恢复操作。
每个innodb引擎至少有1个重做日志文件组(group),每个文件组下面至少有2个重做日志文件。为了提高可靠性,可以设置多个组,放到不同的磁盘中。在日志组中每个重做日志文件大小一致,并以循环写入的方式运行。先写入文件1,写满后写入文件2,2写满再切换到1.
写入redolog不是直接写磁盘,而是先写入一个重做日志缓冲(redo log buffer),然后按一定的条件写入。
所谓的条件:
其他影响redolog的参数
binnlog记录数据库执行更改的操作。默认关闭,需要手动开启。
影响binlog的参数
判断binlog_cache_size是否合适:
mysql> show global status like 'binlog_cache%'
Binlog_cache_disk_use 0
Binlog_cache_use 1
如上,Binlog_cache_disk_use为0,使用临时文件次数为0,这个缓冲区够大,不需要增加。
默认binlog不是每次写的时候都同步磁盘(缓冲写),当系统宕机时,可能会有一部分数据没写入binlog中。参数sync_binlog = [N] 表示写入缓冲多少次就同步到磁盘。N=1表示同步写。不会用到操作系统的缓冲。
如果将sync_binlog设置为1,在一个事务发出commit之前,binlog被写入磁盘,这时候宕机,事务没有提交。下次启动的时候,这个事务没有提交,应该回滚,但是binlog被写入磁盘了,就不能回滚。将innodb_support_xa设置为1可以解决这个问题。能确保binlog和redolog文件的同步。
姜承尧·MySQL技术内幕InnoDB存储引擎·机械工业出版社
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。