4.2 Binlog 作用
在实际应用中,主要用在两个场景:主从复制和数据恢复
-
主从复制场景:在Master主端开启Binlog,将Binlog发生到各个Slave从端,Slave从端重放Binlog从而达到主从数据一致
-
数据恢复场景:通过使用 mysqlbinlog 工具来恢复数据
4.3 Binlog 记录过程及刷盘时机
Binlog何时记录将在第六点进行介绍,大致记录过程是先写Binlog Buffer,然后通过刷盘时机,控制刷入OS Buffer,控制fsync()进行写入Binlog File日记磁盘的过程。
对于Binlog,MySQL是通过参数sync_binlog参数来控制刷盘时机,取值是0、1和N三种值。0表示由系统自行判断何时调用sync()写入磁盘;1表示每次事务commit都要调用fsync()写入磁盘;N表示每N个事务,才会调用fsync()写入磁盘。
4.4 Binlog 记录格式
MySQL5.7.7版本之前默认格式是STATEMENT,版本之后默认是ROW,可以通过参数 binlog-format指定。
五、认识事务日记(Undo log)
5.1 Undo log 概念
Undo log是逻辑日记、回滚日记。比如一条修改+3的逻辑语句,Undo log会记录对应一条-3的逻辑日记,一条插入语句则会记录一条删除语句,这样发生错误时,根据执行Undo log就可以回滚到事务之前的数据状态。
5.2 Undo log 作用
-
回滚数据:当程序发生异常错误时等,根据执行Undo log就可以回滚到事务之前的数据状态,保证原子性,要么成功要么失败。
-
MVCC一致性视图:通过Undo log找到对应的数据版本号,是保证MVCC视图的一致性的必要条件。
5.3 Undo log 记录过程及刷盘时机
刷盘过程及时机类似于Binlog和Redo,可以参考Redo log刷盘时机章节给出的图片,已经体现出来了。
5.4 Undo log 总结
Undo log日记内容不是很多,重点是回滚和多版本控制MVCC那块。此外,我记得印象笔记深刻的是长事务会导致日记过多,这个日记就是Undo log。因为长事务存在,导致需要保存很多视图快照,其实这里就是涉及到Undo log何时删除和生成的问题,当时纠结好久,其实很简单。生成