redo log & undo log & bin log

Redo日志

—innodb存储引擎的日志文件
▪ 当发生数据修改的时候,innodb引擎会先将记录写到redo log中, 并更新内存,此时更新就算是完成了,同时innodb引擎会在合适的时机将记录操作到磁盘中
▪ Redolog是固定大小的,是循环写的过程
▪ 有了redolog之后,innodb就可以保证即使数据库发生异常重启,
之前的记录也不会丢失,叫做crash-safe

ib_logfile_0和ib_logfile_3都是可以写的
write pos 是用来不断的往后写的
checkpoint是不断的擦出已经写过的数据
在这里插入图片描述
就相当于是一个buffer,如果每次修改都写到磁盘当中,效率就会特别特别低,所以就把所有都修改先放到redo.log当中,然后隔一段时间就一次性把redo log的修改写回到磁盘中去

在这里插入图片描述

Undo log

▪ 目的 : 是为了实现事务的原子性
(比如一个事物五条指令,然后执行了三条发生了错误,我们就需要把数据恢复到三条指令错误之前,于是所以就需要记录一下刚刚干了什么好恢复回去)
在mysql数据库InnoDB存储引擎中,还 用Undo Log来实现多版本并发控制(简称:MVCC)
▪ 在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方 称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了 ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之 前的状态
▪ 注意:undo log是逻辑日志,可以理解为:
– 当delete一条记录时,undo log中会记录一条对应的insert记录
– 当insert一条记录时,undo log中会记录一条对应的delete记录
– 当update一条记录时,它记录一条对应相反的update记录

bin log

----服务端的日志文件
前两个都是归属于存储引擎innodb的,这个归属于服务端
▪ binlog是server层的日志,主要做mysql功能层面的事情
▪ 与redo日志的区别:

redo binlog
物理日志记录的是在某个数据页上做了什么修改 逻辑日志记录的是这个语句的原始逻辑
循环写的,空间会用完 可以追加写的,不会覆盖之前的日志信息

ps. kafka:
直接往内存怼,并且效率比较高
1.顺序读写
2.0拷贝

发布了84 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Mercuriooo/article/details/103332398