它被称为重做日志,主要记录的是物理日志,也就是对磁盘上的数据进行的修改操作。 通常包含两部分:内存中的日志缓冲(Redo Log Buffer),易丢失 重做日志文件(Redo Log File),持久化到磁盘,不易丢失基本原理 :
MySQL在提交事务时,会将数据写入Redo Log Buffer,而Redo Log Buffer中的数据会根据一定的规则 写入Redo Log文件。当MySQL发生故障重启时,会通过Redo Log 中的数据对表中的数据进行恢复,也就是 将Redo Log文件中的数据恢复到 order.ibd文件中刷盘规则:
1. 开启事务,发出提交事务指令后是否刷新日志由变量innodb_flush_log_at_trx_commit决定 2. 每秒刷新一次,刷新日志的频率由变量innnodb_flush_log_at_timeout的值决定,默认为1s, 需要注意的是,刷新日志的频率和是否执行commmit操作无关 3. 当Log Buffer中已经使用的内存超过一半时,也会触发刷盘操作 4. 当事务中存在checkpoint(检查点)时,在一定程度上代表了刷写到磁盘时日志所处的LSN位置。 其中LSN(Log Sequence Number)表示日志的逻辑序列号写入机制:
Redo Log主要记录的是物理日志,其文件内容是以顺序循环的方式写入的, 一个文件写满时会写入另一个文件, 最后一个文件写满时,会向第一个文件写数据,并且是覆盖写
1. Write Pos是数据表中当前记录所在的位置,随着不断地向数据表中写入数据,这个位置会向后移动,当移动到最后一个文件的最后一个位置时,又会跳到第一个文件的开始位置进行写操作;
2. CheckPoint是当前要擦除的位置,这个位置也是向后移动,移动到最后一个文件的最后一个位置时,也是回到第一个文件的开始进行擦除。只不过在擦除记录前需要把记录更新到数据文件中;
3. Write Pos和CheckPoint 之前存在间隔时,中间的间隔表示还可以记录新的操作,如果Write Pos移动的速度较快,追上了CheckPoint,则表示数据已经写满,不能再向Redo Log文件中写数据了。此时需要停止写入数据,擦除一些记录
Log Sequence Number:表示日志的逻辑序列号。 在InnoDB存储引擎中,LSN占用8字节的存储空间,并且单调递增。 一般可从中获取到如下信息: 1.Redo Log写入数据的的总量 2.检查点位置 3.数据页版本相关的信息相关参数:
1.innodb_log_buffer_size: 表示log buffer的大小,默认为8MB 2.innodb_log_file_size: 表示事务日志的大小,默认为5MB 3.innodb_log_files_group: 表示事务日志组中的事务日志文件个数,默认为2个 4.innodb_log_group_home_dir =./: 表示事务日志组所在的目录,当前目录表示MySQL数据所在的目录



