大厂面试官问我:redolog 为什么是环形?【后端八股文七:Mysql日志八股文合集(1)】

 hello hello~ ,这里是绝命Coding——老白~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹

💥个人主页绝命Coding-CSDN博客
💥 所属专栏后端技术分享
这里将会不定期更新有关后端、前端的内容,希望大家多多点赞关注收藏💖

    往期内容:

大厂面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文一:Redis点赞八股文合集】-CSDN博客

大厂面试官问我:布隆过滤器有不能扩容和删除的缺陷,有没有可以替代的数据结构呢?【后端八股文二:布隆过滤器八股文合集】-CSDN博客

大厂面试官问我:Redis持久化RDB有没有可能阻塞?阻塞点在哪里?【后端八股文三:Redis持久化八股文合集】-CSDN博客

大厂面试官问我:Redis内存淘汰,LRU维护整个队列吗?【后端八股文四:Redis内存淘汰策略八股文合集】-CSDN博客

本文为【Mysql日志八股文合集(1)】初版,后续还会进行优化更新,欢迎大家关注点赞评论交流~

大家第一眼看到这个标题,不知道心中是否有答案了?在面试当中,面试官经常对项目亮点进行深挖,来考察你对这个项目亮点的理解以及思考!这个时候,你如果可以回答出面试官的问题,甚至是主动说出自己的思考,那在面试中是大大加分的~

Mysql的redo log,undo log,bin log的作用

重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)

redo log(事务日志)
InnoDB引擎特有的,只记录该引擎中表的修改记录
物理日志,记录在具体某个数据页做了什么修改
循环写的,空间固定会用完

bin log
Mysql的Server层实现的,会记录所有引擎对数据库的修改
逻辑日志,记录的是原始逻辑
可以追加的,写到一定大小后会切换到下一个,并不会覆盖以前的日志

/

redolog记录修改内容(哪一页发生了变化),写于事务开始前,用于数据未落磁盘,但数据库挂了后的数据恢复
(事务日志)
binlog记录修改sql,写于事务提交时,可用于读写分离

undolog记录修改前记录,用于回滚和多版本并发控制
(事务开始前写的,回滚——原子性)
(回滚日志)

mysql 原子性和持久性是通过什么保证的 只通过redolog能保证持久性吗

MySQL的原子性和持久性是通过Redo Log和Binlog来保证的。Redo Log可以保证事务的持久性,而两阶段提交机制可以保证事务的原子性。

redolog和binlog的两阶段提交

  • 事务执行过程中,先写Redo Log,记录这个事务的所有变更操作。
  • 事务提交时,先写Binlog,记录这个事务的SQL语句。
  • 只有在Binlog写入成功后,才会提交事务,并且把Redo Log的事务标记为可提交状态。

redolog 和 binlog 除了作用不同,在文件格式上有什么不同

  • Redo Log是循环写的二进制日志文件,记录数据页的变更。
  • Binlog是顺序追加写的日志文件,记录SQL语句。

redolog是追加写吗?除了binlog还有什么是通过追加写优化的?

Redo Log是通过循环追加写的方式进行优化的。除此之外,MySQL中还有undo log也是通过追加写优化的

mysql 执行一个update语句流程

  • 先写undo log,记录修改前的数据副本。
  • 再写redo log,记录修改操作。
  • 最后更新内存中的数据页。

redo log可不可以直接写数据页?

Redo Log是不能直接写入数据页的,它只能记录数据页的变更操作。数据页的实际更新是由checkpoint机制来完成的。

redolog 为什么是环形

Redo Log之所以采用环形日志的设计,是为了减少磁盘IO,提高性能。当日志写满时,会覆盖最早的部分。

三个日志 redolog和binlog是否是必须的 为什么

Redo Log和Binlog都是必需的。Redo Log保证了事务的持久性,Binlog用于备份和增量恢复。

开启一个事务后,修改一条数据,binlog、undolog、redolog是分别在哪个阶段写的

在开启事务后,修改数据的整个过程如下:

  • 先写undo log,记录修改前的数据副本。
  • 再写redo log,记录这个修改操作。
  • 最后写binlog,记录这个SQL语句。

Select 是什么 update是什么 ,再加入mvcc之后怎么处理,undolog和redolog在这种情况下里面写了什么,最后事务提交了之后怎么样

Select操作不需要写redo log和binlog,因为它只是读取数据,不会修改数据。Update操作需要写undo log、redo log和binlog,用于记录修改过程和SQL语句。MVCC通过undo log实现了版本控制和读写分离

如何将redolog的数据同步到磁盘 / redolog的写磁盘策略

redo Log的刷盘策略是:

  • 事务提交时,强制将Redo Log刷到磁盘。
  • 后台线程定期将Redo Log刷到磁盘。
  • 当Redo Log占用空间超过一定阈值时,也会触发刷盘。

redolog写入的时机,redolog和真实数据写入提交的整个过程

Redo Log的写入时机如下:

  • 事务执行过程中,每修改一次数据,就会写入一条Redo Log。
  • 事务提交时,会强制将Redo Log刷新到磁盘。

存不存在redolog提交但是后面顶上来的擦不掉前面的情况

不会存在Redo Log提交但数据丢失的情况,因为Redo Log采用了双写机制,既写入内存也写入磁盘。

如果redolog预写入成功,binlog成功,修改redolog失败,那么这条数据有效吗?

如果Redo Log预写入成功,Binlog写入成功,但Redo Log修改失败,则该事务依然会被回滚,数据不会生效。

如果redolog成功,binlog失败会发生什么?redolog失败呢?

如果Redo Log成功,Binlog失败,MySQL会终止当前事务。如果Redo Log失败,事务也会被终止

redolog恢复的是什么数据,刷盘周期?/ redolog日志存储的是什么内容

Redo Log用于恢复数据页的变更,Binlog用于增量恢复整个数据库。Redo Log的刷盘周期由后台线程控制

BinLog位于哪一层?RedoLog位于哪一层?

Binlog位于MySQL Server层,Redo Log位于存储引擎层。

只有BinLog,没有RedoLog可以吗? 只有RedoLog,没有BinLog可以吗?

只有Binlog没有Redo Log是可以的,但会牺牲事务的持久性。只有Redo Log没有Binlog的话,则无法进行数据库备份和恢复。

数据库迁移的时候为什么用binlog而不是用redolog?

数据库迁移时使用Binlog,是因为Binlog包含了完整的SQL语句信息,可以直接用于恢复数据。Redo Log只记录了数据页的变更,无法直接用于恢复。

如果数据库数据全部被删了,为什么需要通过binlog恢复,而不是redolog

如果数据库数据被全部删除,需要通过Binlog来进行恢复,因为Binlog包含了完整的SQL语句信息,可以重放来恢复数据。而Redo Log只能用于数据页的恢复,无法完整恢复数据库。

binlog的日志格式的种类和分别

Binlog的日志格式有Statement、Row和Mixed三种,分别记录SQL语句、行变更和混合模式。

做主从同步的时候通过binlog同步,redolog会不会也同步?

主从同步通过Binlog进行数据同步,Redo Log不会直接参与同步,但Redo Log中的变更信息会间接地反映在Binlog中

后期新的八股文合集文章会仅粉丝可见,感兴趣的小伙伴可以点个关注~

 更多精彩内容以及一手消息请关注公众号:绝命Coding

公众号私信回复“免费资料”可免费获取简历模板以及技术亮点合集等免费资料

  • 37
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值