Skip to content

Commit f6af48a

Browse files
committed
MVCC,redolog,undolog,binlog
1 parent 4360917 commit f6af48a

2 files changed

Lines changed: 18 additions & 0 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
面试官:分别讲一下MySQL的几大文件,你懂的
2+
3+
我:我不懂,ok,好的。
4+
5+
- undoLog 也就是我们常说的**回滚日志文件** 主要用于事务中执行失败,进行回滚,以及MVCC中对于数据历史版本的查看。由**引擎层的InnoDB引擎实现**,是**逻辑日志**,记录数据修改被修改前的值,比如"把id='B' 修改为id = 'B2' ,那么undo日志就会用来存放id ='B'的记录”。当一条数据需要更新前,会先把修改前的记录存储在undolog中,如果这个修改出现异常,则会使用undo日志来实现回滚操作,保证事务的一致性。当事务提交之后,**undo log并不能立马被删除,而是会被放到待清理链表中,待判断没有事务用到该版本的信息时才可以清理相应undolog**。它保存了事务发生之前的数据的一个版本,用于回滚,**同时可以提供多版本并发控制下的读(MVCC)**,也即非锁定读。
6+
- redoLog 是重做日志文件是**记录数据修改之后的值****用于持久化到磁盘中**。redo log包括两部分:**一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的**;二是**磁盘上的重做日志文件(redo log file)**,该部分日志是持久的。由引**擎层的InnoDB引擎实现**,是**物理日志**,记录的是物理数据页修改的信息,比如“某个数据页上内容发生了哪些改动”。当一条数据需要更新时,InnoDB会先将数据更新,然后记录redoLog 在内存中,然后找个时间将redoLog的操作执行到磁盘上的文件上。不管是否提交成功我都记录,你要是回滚了,那我连回滚的修改也记录。它确保了事务的持久性。
7+
- binlog由**Mysql的Server层实现**,是**逻辑日志**,记录的是sql语句的原始逻辑,比如"把id='B' 修改为id = ‘B2’。binlog会写入指定大小的物理文件中,是追加写入的,当前文件写满则会创建新的文件写入。 产生:**事务提交的时候,一次性将事务中的sql语句,按照一定的格式记录到binlog中。用于复制和恢复在主从复制中,从库利用主库上的binlog进行重播(执行日志中记录的修改逻辑),实现主从同步。业务数据不一致或者错了,用binlog恢复**
8+
- MVCC多版本并发控制是MySQL中基于**乐观锁理论实现隔离级别**的方式,用于**读已提交和可重复读**取隔离级别的实现。在MySQL中,会在表中每一条数据后面添加两个字段:**最近修改该行数据的事务ID****指向该行(undolog表中)回滚段的指针****Read View判断行的可见性,创建一个新事务时,copy一份当前系统中的活跃事务列表。意思是,当前不应该被本事务看到的其他事务id列表**
9+
10+
**binlog和redolog的区别**
11+
12+
1. redolog是在**InnoDB存储引擎层产生**,而**binlog是MySQL数据库的上层服务层产生**的。
13+
2. 两种日志记录的内容形式不同。MySQL的**binlog是逻辑日志**,其记录是**对应的SQL语句**。而**innodb存储引擎层面的重做日志是物理日志**
14+
3. 两种日志与记录写入磁盘的时间点不同,**binlog日志只在事务提交完成后进行一次写入**。而**innodb存储引擎的重做日志在事务进行中不断地被写入,并日志不是随事务提交的顺序进行写入的**
15+
4. **binlog不是循环使用,在写满或者重启之后,会生成新的binlog文件,redolog是循环使用**
16+
5. **binlog可以作为恢复数据使用,主从复制搭建****redolog作为异常宕机或者介质故障后的数据恢复使用**
17+

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
- [垃圾回收](/Interview/sad/垃圾回收.md)
7575
- [InnoDB和MyISAM](/Interview/sad/InnoDB和MyISAM.md)
7676
- [MySQL的ACID和隔离级别](/Interview/sad/MySQL的ACID和隔离级别.md)
77+
- [MVCC,redolog,undolog,binlog](/Interview/sad/MVCC,redolog,undolog,binlog.md)
7778

7879
## 刷题系列
7980
- [推荐:CS-Notes](https://cyc2018.github.io/CS-Notes/#/?id=✏️-算法)

0 commit comments

Comments
 (0)