【面试题精讲】MySQL-redo-log

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【面试题精讲】MySQL-redo-log

!! 有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

首发博客地址

全网最细面试题手册,支持艾宾浩斯记忆法


1. 什么是 MySQL 的 Redo Log?

Redo Log 是 MySQL InnoDB 存储引擎中的一种重要的日志工具。它主要用于记录数据库中所有的修改操作,包括但不限于插入、删除和更新等操作,以便在系统崩溃等异常情况下进行数据恢复。

2. 为什么需要 MySQL 的 Redo Log?

在保证数据库的高可用性和稳定性方面,Redo Log 在数据库设计中占有重要的地位。经常发生的一些不可预测的事件,诸如电源断电或系统崩溃,可能导致数据库运行出现问题。这时候,Redo Log 就可以通过重放修改记录的方式,把数据恢复到崩溃前的状态,既保证了数据的安全性,也保证了数据的一致性。

3. Redo Log 的实现原理

Redo log 是由两部分组成的:Redo log bufferRedo log file

在 InnoDB 存储引擎中,当有一次数据修改发生时,首先,会先将这次修改的信息写入到 Redo Log Buffer(内存中的一块区域)。然后,在合适的时机(如:事务提交、Buffer 满等),MySQL 会将缓冲区中的数据写入到 Redo Log File(硬盘上的物理文件)中。这个过程称为 flush

当系统发生异常重启后,MySQL 会读取 Redo Log File 中的日志记录,按照日志的顺序,重新执行这些修改操作,以此恢复数据库到异常发生前的状态。

例如,以下是一个简单的插入操作关于 Redo Log 的流程(Java 伪代码):

transaction.begin();  // 开始事务
insert into t ...;    // 插入记录
...                   // 更多的 DML 操作
transaction.commit(); // 提交事务
// 上述操作在 InnoDB 内部的处理过程如下:
// 1. 开始事务
mysql_query("START TRANSACTION");
// 2. 插入记录
str = "insert into t ...";
mysql_query(str);    // 这会将 str 对应的修改信息写入到 Redo Log Buffer
// 3. 提交事务
mysql_query("commit");  // 这时,MySQL 会将 Redo Log Buffer 中的数据 flush 到 Redo Log File

4. Redo Log 的使用示例

在 MySQL 中,Redo log 的使用对用户来说是透明的,事务操作的所有修改都会自动写入到 Redo Log 中。用户可以通过配置参数来调整 Redo log 的大小和刷新周期等属性,以满足特定的性能和数据安全性需求。

  • 查看 Redo Log 信息
    SELECT * FROM SYS_LOG;
  • 更改 Redo Log 相关设置
    SET @@global.innodb_log_files_in_group = 3; SET @@global.innodb_log_file_size = 52428800;

5. Redo Log 的优点

  • 数据安全:无论何时系统崩溃,都可以通过重放 Redo Log 来恢复数据的修改。
  • 数据一致性:确保了事务的原子性和持久性,即使在中断的情况下也能保证数据的一致性。
  • 性能优化:通过缓冲技术(write-back policy),把写磁盘的 IO 操作集中在少数时间进行,以提高性能。

6. Redo Log 的缺点

  • 空间占用:Redo Log 文件会永久占用指定的磁盘空间,这部分空间一旦分配便无法释放。
  • 性能受限:由于所有的修改都需要写入到 Redo Log,所以 Redo Log 的 IO 性能成为了整个数据库性能的瓶颈。

7. Redo Log 的使用注意事项

  • 空间配置:需要充分考虑数据库的实际运行情况,并合理配置 Redo Log 的大小,防止空间占用过大或通过防止频繁地进行日志切换对性能产生影响。
  • 刷新策略:可以通过参数 innodb_flush_log_at_trx_commit 来定制 Redo Log 刷新到磁盘的策略,以平衡性能和数据安全性。

8. 总结

SQL 的 Redo Log 是一种重要的日志工具,可以在系统异常后恢复数据。在数据库设计中,Redo Log 至关重要,它可以有效地保护用户数据不会因为系统崩溃而丢失。同时,它也是数据库高性能和高可用性的重要保证。

本文由 mdnice 多平台发布

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
SQL 关系型数据库 MySQL
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
MySQL慢查询优化、索引优化,是必知必备,大厂面试高频,本文深入详解,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试官:聊下 MySQL 慢查询优化、索引优化?
|
24天前
|
存储 关系型数据库 MySQL
阿里面试:为什么要索引?什么是MySQL索引?底层结构是什么?
尼恩是一位资深架构师,他在自己的读者交流群中分享了关于MySQL索引的重要知识点。索引是帮助MySQL高效获取数据的数据结构,主要作用包括显著提升查询速度、降低磁盘I/O次数、优化排序与分组操作以及提升复杂查询的性能。MySQL支持多种索引类型,如主键索引、唯一索引、普通索引、全文索引和空间数据索引。索引的底层数据结构主要是B+树,它能够有效支持范围查询和顺序遍历,同时保持高效的插入、删除和查找性能。尼恩还强调了索引的优缺点,并提供了多个面试题及其解答,帮助读者在面试中脱颖而出。相关资料可在公众号【技术自由圈】获取。
|
17天前
|
SQL 缓存 关系型数据库
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴因未能系统梳理MySQL缓存机制而在美团面试中失利。为此,尼恩对MySQL的缓存机制进行了系统化梳理,包括一级缓存(InnoDB缓存)和二级缓存(查询缓存)。同时,他还将这些知识点整理进《尼恩Java面试宝典PDF》V175版本,帮助大家提升技术水平,顺利通过面试。更多技术资料请关注公号【技术自由圈】。
美团面试:Mysql 有几级缓存? 每一级缓存,具体是什么?
|
1月前
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
11天前
|
SQL 算法 关系型数据库
面试:什么是死锁,如何避免或解决死锁;MySQL中的死锁现象,MySQL死锁如何解决
面试:什么是死锁,死锁产生的四个必要条件,如何避免或解决死锁;数据库锁,锁分类,控制事务;MySQL中的死锁现象,MySQL死锁如何解决
|
19天前
|
SQL 关系型数据库 MySQL
美团面试:Mysql如何选择最优 执行计划,为什么?
在40岁老架构师尼恩的读者交流群中,近期有小伙伴面试美团时遇到了关于MySQL执行计划的面试题:“MySQL如何选择最优执行计划,为什么?”由于缺乏系统化的准备,小伙伴未能给出满意的答案,面试失败。为此,尼恩为大家系统化地梳理了MySQL执行计划的相关知识,帮助大家提升技术水平,展示“技术肌肉”,让面试官“爱到不能自已”。相关内容已收录进《尼恩Java面试宝典PDF》V175版本,供大家参考学习。
|
30天前
|
SQL 关系型数据库 MySQL
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
尼恩,一位40岁的资深架构师,通过其丰富的经验和深厚的技術功底,为众多读者提供了宝贵的面试指导和技术分享。在他的读者交流群中,许多小伙伴获得了来自一线互联网企业的面试机会,并成功应对了诸如事务ACID特性实现、MVCC等相关面试题。尼恩特别整理了这些常见面试题的系统化解答,形成了《MVCC 学习圣经:一次穿透MYSQL MVCC》PDF文档,旨在帮助大家在面试中展示出扎实的技术功底,提高面试成功率。此外,他还编写了《尼恩Java面试宝典》等资料,涵盖了大量面试题和答案,帮助读者全面提升技术面试的表现。这些资料不仅内容详实,而且持续更新,是求职者备战技术面试的宝贵资源。
阿里面试:MYSQL 事务ACID,底层原理是什么? 具体是如何实现的?
|
1月前
|
SQL 关系型数据库 MySQL
京东面试:什么情况下 mysql RR不能解决幻读? RR隔离mysql如何实现?
老架构师尼恩在其读者交流群中分享了关于MySQL事务隔离级别的深入解析,特别针对RR级隔离如何解决幻读问题进行了详细讨论。文章不仅解释了ACID中的隔离性概念,还列举了四种事务隔离级别(未提交读、提交读、可重复读、串行读)的特点及应用场景。尼恩通过具体的例子和图表,清晰地展示了不同隔离级别下的并发事务问题(脏读、不可重复读、幻读)及其解决方案,特别是RR级隔离下的MVCC机制如何通过快照读和当前读来防止幻读。此外,尼恩还提供了相关面试题的解答技巧和参考资料,帮助读者更好地准备技术面试。更多详细内容和实战案例可在《尼恩Java面试宝典》中找到。
|
1月前
|
SQL 安全 关系型数据库
MySQL 增删操作面试题
MySQL 增删操作面试题
114 1
|
1月前
|
SQL 关系型数据库 MySQL
美团面试:mysql 索引失效?怎么解决? (重点知识,建议收藏,读10遍+)
本文详细解析了MySQL索引失效的多种场景及解决方法,包括破坏最左匹配原则、索引覆盖原则、前缀匹配原则、`ORDER BY`排序不当、`OR`关键字使用不当、索引列上有计算或函数、使用`NOT IN`和`NOT EXISTS`不当、列的比对等。通过实例演示和`EXPLAIN`命令分析,帮助读者深入理解索引失效的原因,并提供相应的优化建议。文章还推荐了《尼恩Java面试宝典》等资源,助力面试者提升技术水平,顺利通过面试。