IT袋

当前位置:主页 > 经验教程 > 建站编程 >

InnoDB数据的三种log类型和作用

InnoDB数据的三种log类型和作用(3)

时间:2023-09-23 22:59:25 来源:IT袋 作者:苏晓敏
导读:InnoDB数据的三种log类型和作用,log buffer中写入redolog的过程是顺序的,但不是一条一条写入,而是一个mtr完成后,将里面所有的redolog一起复制到log buffer中(还会把执行过程中可能修改过

InnoDB数据的三种log类型和作用

log buffer中写入redolog的过程是顺序的,但不是一条一条写入,而是一个mtr完成后,将里面所有的redolog一起复制到log buffer中(还会把执行过程中可能修改过的页面加入到Buffer Pool的flush链表),也就是存储到redolog block中,可能占用不到一个block,也可能占用多个block。一个事务可以包含多个mtr,那么多个事务的mtr就会有交集,事务间的mtr会相互穿插。

binlog

binlog是属于MySQL Server层面的,又称为归档日志,属于逻辑日志,是以二进制的形式记录的,是sql语句的原始逻辑,主要是用于进行集群中保证主从一致以及执行异常操作后恢复数据。

binlog日志文件默认大小由磁盘决定,顺序追加写入。binlog内存数据存储在binlog cache中(大小由binlog_cache_size控制),磁盘数据则存储在binlog file中。

binlog有三种格式,分别是Row、Statement、Mixed。

  • Row格式记录了操作语句对具体行的操作以及操作前的整行信息,缺点是占空间大(一条sql影响的行数),优点是能保证数据安全,不会发生遗漏,是5.7版本默认格式。
  • Statement格式记录了修改的sql(只是一条sql语句),缺点是在集群中可能会导致操作不一致从而使得数据不一致,如执行now()函数可能会导致不同机器值不同。
  • Mixed格式会针对于操作的sql选择使用Row还是Statement,相比于Row更省空间,但还是可能发生主从不一致的情况。

binlog和redolog虽然都保存了记录的修改日志,但两者有一些区别:

  • binlog是逻辑日志,记录的是对哪一个表的哪一行做了什么修改;redolog是物理日志,记录的是对哪个数据页中的哪个记录做了什么修改。
  • binlog是追加写;redolog是循环写,日志文件有固定大小,会覆盖之前的数据。
  • binlog是Server层的日志;redolog是InnoDB的日志。如果不使用InnoDB引擎,就没有redolog。

上述就是InnoDB数据的三种log类型和作用的具体内容,未经IT袋网网(www.itdai.com)允许禁止转载!

相关阅读