redolog和binlog
为什么先写 redo log 呢 ?
- 先 redo 后 bin : binlog 丢失,少了一次更新,恢复后仍是0。
- 先 bin 后 redo : 多了一次事务,恢复后是1。
区别
:
层次:redo log 是 innoDB 引擎特有的,server 层的叫 binlog(归档日志)
内容:redolog 是物理日志,记录“在某个数据页上做了什么修改”;binlog 是逻辑日志,是语句的原始逻辑,如“给 ID=2 这一行的 c 字段加 1 ”
写入:redolog 循环写且写入时机较多,binlog 追加且在事务提交时写入
————————————————
对于语句 update T set c=c+1 where ID=2;
执行器先找引擎取 ID=2 这一行。ID 是主键,直接用树搜索找到。如果 ID = 2 这一行所在数据页就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,再返回。
执行器拿到引擎给的行数据,把这个值加上 1,N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
执行器生成这个操作的 binlog,并把 binlog 写入磁盘。
执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成
————————————————
两者区别
redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=10 这一行的 c 字段加 10 ”。
redo log 是循环写的,空间固定会用完; binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。
————————————————
有了redlog,为什么还要有binglog
一个原因是,redolog只有InnoDB有,别的引擎没有。另一个原因是,redolog是循环写的,不持久保存,binlog的“归档”这个功能,redolog是不具备的。
redo log 是循环写的,固定空间用完会怎么办?这个也就是下面也会带着大家去了解的MySQL的刷脏页策略。
————————————————
440

被折叠的 条评论
为什么被折叠?



