大厂面试题:bin log,redo log,undo log的区别

一、binlog

1.什么是binlog?

binlog 其实说白了就是记录数据库表结构和表表数据的变更,(比如 update/insert/delete/truncate),它不会记录select,因为select没有变化

2.binlog长啥样?

记录着每条变更的sql语句,还有txid–事务id

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jlaOQpsh-1626001953452)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210711183632220.png)]

3.binlog一般用来干什么?

复制和恢复数据,比如现在mysql一般都是一主多从,从服务器与主服务器数据保持一致,一般都是通过binlog来做

又因为binlog其实记录着数据库表的变化,所以可以用来做数据恢复和主从复制

二、redo log

首先当我们执行更新操作时:update user_table set name=‘java3y’ where id = ‘3’

mysql底层其实是会把这条数据所在的页加载到内存,然后在内存中将对应记录进行修改,内存写完之后其实会写redolog,这份redo-log记录着这次在某个页上做了什么修改。

所以总结看来redo log的作用:当我们修改数据,写完内存,但是数据还没有真正写到磁盘的时候,此时我们的数据库挂掉了,我们就可以根据redo log对数据进行恢复,同时因为redo log是顺序io,所以写入速度很快,同时redo log记录的是物理变化,(xxx页做了什么修改),所以体积很小。

binlog与redolog区别是啥?

两者很像,但是也有些区别

1 首先存储的内容不同,

binlog记录的是实实在在的sql语句,而redolog记录的是xx页做了啥子修改

所以总结看来binlog记录的是数据的逻辑变化,redolog记录的是数据的物理变化

2 功能不同

​ binlog主要是为了数据的复制和恢复来使用,如果说整个数据库不小心被删除了,而binlog存储着所有数据的变更情况,这个时候其实是可以通过binlog来恢复数据的;主从服务器保持数据的一致性当然也可以通过binlog

而redolog它的作用主要是用来恢复内存当中还没来得及刷入磁盘的数据,将redolog加载到内存里面,内存就能恢复到挂掉之前的数据。

那么redo log可以用来恢复数据库误删的数据吗?不可以,因为redolog它其实只是记录着物理数据的变化,如果内存中的数据已经刷入到磁盘,那其实redolog的数据就无效了,所以redo log其实并不会存储历史所有数据的变化,文件的内容会被覆盖的。

三、undo log文件

undo log有什么用?

undolog 主要用来回滚和mvcc多版本控制

undolog长啥子样?

undolog其实存储的也是逻辑日志,比如说我们要insert一条语句,那么undolog就记录着一条delete语句,所以说它可以用来做回滚

同时因为undolog记录的是修改之前的数据,相当于前一个版本,而mvcc实现的是读写不阻塞,读的时候只要返回前一个版本的数据就好了。

你可能感兴趣的:(mysql,mysql,数据库,sql)