内容简介:Mysql的日志模块尤为重要,平日的crash-safe和主从都依赖我们的日志模块。Mysql innoDB有两个日志模块:咱们先看一下redolog。
Mysql的日志模块尤为重要,平日的crash-safe和主从都依赖我们的日志模块。
Mysql innoDB日志
Mysql innoDB有两个日志模块: redolog 和 binlog
咱们先看一下redolog。
redolog中文来讲就是重做日志,它有什么用呢?如果每次你的更新或者插入都写入磁盘的话那这个IO成本就比较大了,所以InnoDB就把记录先记录在redolog中,并同时更新到内存中,这样就完成了一次更新或插入了!
而且 redolog是循环写的,也就是有固定大小的 ,当快写满的时候 mysql 就会把把一些记录更新到磁盘中,然后清除更新的那些redolog,给之后的记录腾出空间。
binlog也就是归档日志,它又是什么用呢?顾名思义它的主要作用就是归档(还有主从)!有三种模式:
statement:记录每一条除了查询之外语句。
row:记录每一行记录修改的形式,也就是记录了哪一行改了,改了啥!就比如你update了100条记录,那它就会记录这100条记录改了啥(5.1.5版本才有)
mixed:就是statement和row的混合了,由mysql来判断这条语句用哪种形式记录!(5.1.8版本才有)
binlog没有固定大小,每次都是追加记录不会覆盖之前的。
还有一点,redolog只有InnoDB才有,它是存在引擎层的,而binlog是存在Server层的。所以如果你用的存储引擎的MyISAM,那么你就没有redolog了!
两段式提交
接下来我们再说说两段式提交。
两段式提交,就是我们先把这次更新写入到redolog中,并设redolog为prepare状态,然后再写入binlog,写完binlog之后再提交事务,并设redolog为commit状态。也就是把relolog拆成了prepare和commit两段!
为啥要这样做?
其实redolog是后来才加上的,binlog是之前就有的。一开始存储引擎只有MyISAM,后来才有的InnoDB,然后MyISAM没有事务,没有crash-safe的能力。所以InnoDB搞了个redolog。然后 为了保证两份日志同步,所以才有了两段式提交 。
你假设一下如果先保存好redolog,然后再记录binlog。如果redolog写好了之后挂了。ok你看起来好像是没问题了,但是你的binlog还没记录,所以这条记录就少了!如果你备份这份binlog之后,你这条记录就永远的少了!
那如果先写binlog再写redolog呢?那binlog写完了,你数据库挂了,那redolog是不是没有,没有的意思就是你以前你没更新成功。但是binlog已经记录好了,在它那边反正是成功了,所以那备份的binlog也不对!
综上所述:两段式提交!
如果有错误欢迎指正!
个人公众号:yes的练级攻略
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 分布式系统 - 两段式提交(2PC)和三段式提交(3PC)
- 领域驱动实战思考(三):DDD的分段式协作设计
- PHP分布式事务-两段式提交 2PC(一)
- Python面试经验总结,面试一时爽,一直面试一直爽!
- 算法面试:数组编码面试问题
- 【面试虐菜】—— JAVA面试题(1)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。