bin_log 和redo_log的区别。
bin_log 和redo_log的区别。
提示
题眼: 从层级,内容和写入方式展开。
- RedoLog 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
- RedoLog 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
- RedoLog 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。 最后,简单说下:如果没有了RedoLog,数据就无法做到crash-safe,因为 binlog不具备保存事务的性质,最重要的是它并不具备记录数据页上究竟发生了什么。如果没有 binlog的话,RedoLog是个循环写入的,不存在归档这个功能。
重要
参考答案:
bin_log 和redo_log都是MySQL的日志,但是他们所在的层级不同。bin_log是由MySQL的Server层实现的,所有引擎都可以使用,而redo_log是InnoDB特有的。Binlog比较简单,它记录的是SQL语句,而redolog则记录的是对某个数据页上做了什么修改,另外,redolog是由一个环状结构,他的空间是优先的,binlog则是线性的,可以持续追加写入。
Innodb会使用两阶段提交协议来写入RedoLog和BinLog,这样子来保证事务的持久性,光靠binlog做不到这一点。
