当前位置: 首页 > news >正文

【编程底层原理】mysql的redo log undo log bin log日志的作用,以及何时生成,涉及到哪些参数变量

MySQL中的redo log、undo log和bin log是三种重要的日志,它们在数据库事务处理、数据持久性和复制等场景中发挥着关键作用。

1. Redo Log(重做日志)

    • 作用:Redo log用来保证事务的持久性。当数据库发生故障时,可以使用redo log来恢复数据到最后一次提交的状态。它记录了数据页的物理修改,即事务对数据页所做的更改。
    • 何时生成:在事务执行过程中,每当有数据页被修改时,对应的redo log就会被生成,并存储在内存中的redo log buffer里。
    • 参数变量: - innodb_log_buffer_size:控制redo log buffer的大小。 - innodb_flush_log_at_trx_commit:控制事务提交时redo log的刷盘行为,可以设置为0、1或2。 - innodb_log_file_size:定义单个redo log文件的大小

2. Undo Log(回滚日志)

    • 作用:Undo log用于事务的原子性和MVCC(多版本并发控制)。如果事务需要回滚或数据库崩溃,undo log可以用于恢复原始数据。同时,它支持在读取操作中提供数据的旧版本,使得在高并发环境下,不同的事务可以看到数据的不同版本。
    • 何时生成:在事务开始时创建,事务的每个修改操作都会生成undo log。
    • 参数变量: - 没有特定的参数直接控制undo log的大小,但它受innodb_buffer_pool_size的影响,因为undo log存储在buffer pool中。

3. Binlog(二进制日志)

    • 作用:Binlog是MySQL服务器层的日志,用于记录所有数据库表结构变更和数据修改的日志(不包括SELECT和SHOW这类操作)。它主要用于数据的复制和恢复。
    • 何时生成:在事务提交时生成,记录了该事务期间所有修改数据的操作。
    • 参数变量: - expire_logs_days:设置binlog文件的过期天数。 - max_binlog_size:定义单个binlog文件的最大大小。 - sync_binlog:控制每次事务写入binlog后是否进行fsync同步到磁盘。

4.总结

这些日志共同工作,确保了MySQL数据库的稳定性和数据的一致性。Redo log和undo log是InnoDB存储引擎特有的日志,而binlog则是MySQL服务器层的日志,它们之间的区别主要在于作用、生成时机和适用对象。

5.完整的流程

1. 开始事务

  • 描述:这是数据库事务的起点,标志着一系列操作的开始,这些操作将作为一个整体被执行。

2. 生成Undo Log

  • 描述:在事务开始时创建,用于记录事务对数据的每个修改操作的反向操作。如果事务需要回滚或数据库需要恢复到某个一致的状态,Undo Log将被用来撤销已经进行的修改。

3. 事务修改数据

  • 描述:在事务中,数据被修改。这可能包括插入、更新或删除操作。

4. 生成Redo Log

  • 描述:每当事务修改数据时,相应的Redo Log会被生成。Redo Log记录了数据页的物理修改,确保在发生故障时可以从日志中重放操作,恢复到最后一次提交的状态。

5. 事务提交

  • 描述:当事务中的所有操作成功完成,并且用户或应用程序发出提交指令时,事务将被标记为提交。这通常意味着所有更改都将被永久保存到数据库中。

6. 刷写Redo Log到磁盘

  • 描述:在事务提交时,为了保证持久性,Redo Log从内存中的Redo Log Buffer刷写到磁盘上的日志文件中。这个过程确保了即使在数据库服务器崩溃的情况下,修改也能被恢复。

7. 生成Bin Log

  • 描述:在事务提交时生成,Bin Log记录了该事务期间所有修改数据的操作。它是MySQL复制和数据恢复的关键组成部分,因为它提供了一种机制来复制和恢复在主服务器上执行的操作。

8. 事务完成

  • 描述:一旦Redo Log被刷写到磁盘,并且Bin Log被生成,事务就被认为是完整且持久化的。此时,事务的所有操作都已经被安全地保存,并且可以被系统其他部分访问。

Redo Log 参数变量

  • innodb_log_buffer_size:控制Redo Log Buffer的大小,这个缓冲区用于在将日志写入磁盘之前存储Redo Log。
  • innodb_flush_log_at_trx_commit:控制事务提交时Redo Log的刷盘行为。可以设置为0(不刷盘)、1(每次事务提交都刷盘)或2(每秒刷盘一次)。
  • innodb_log_file_size:定义单个Redo Log文件的大小,影响Redo Log文件的总量和刷盘操作的频率。

Undo Log 参数变量

  • innodb_buffer_pool_size:虽然Undo Log的大小没有直接的参数控制,但它存储在Buffer Pool中,因此这个参数影响Undo Log的存储和性能。

Bin Log 参数变量

  • expire_logs_days:设置Binlog文件的过期天数,之后这些文件将被自动删除。
  • max_binlog_size:定义单个Binlog文件的最大大小,达到这个大小时,Binlog将被旋转。
  • sync_binlog:控制每次事务写入Binlog后是否进行fsync同步到磁盘,以确保数据的持久性。

这些步骤和参数共同确保了MySQL数据库的稳定性和数据的一致性,无论是在正常操作还是在系统故障后。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Oracle 单机和集群环境部署教程
  • JUC高并发编程1:JUC概述
  • 【学习笔记】IOC容器
  • 用工厂模式演示springboot三种注入方式 | @Autowired
  • C++基础知识7 list
  • css如何设置间距
  • Mac 上哪个剪切板增强工具比较好用? 好用剪切板工具推荐
  • zabbix入门单机部署
  • SpringBoot如何在使用MongoRepository时启用@Created
  • Laravel邮件发送:从配置到发邮件的指南!
  • 《程序猿之设计模式实战 · 观察者模式》
  • 随机掉落的项目足迹:100vh - 50px——减法居然还能这么玩儿?
  • Apifox 「定时任务」操作指南,解锁自动化测试的新利器
  • MATLAB系列09:图形句柄
  • Java 微服务框架 HP-SOA v1.1.4
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【5+】跨webview多页面 触发事件(二)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • es6
  • FineReport中如何实现自动滚屏效果
  • JAVA 学习IO流
  • Netty 4.1 源代码学习:线程模型
  • Redis的resp协议
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • vue总结
  • web标准化(下)
  • XForms - 更强大的Form
  • 从PHP迁移至Golang - 基础篇
  • 从setTimeout-setInterval看JS线程
  • 翻译:Hystrix - How To Use
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 驱动程序原理
  • 我有几个粽子,和一个故事
  • 想写好前端,先练好内功
  • 小程序开发中的那些坑
  • 携程小程序初体验
  • 主流的CSS水平和垂直居中技术大全
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • # dbt source dbt source freshness命令详解
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (苍穹外卖)day03菜品管理
  • (第61天)多租户架构(CDB/PDB)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (全注解开发)学习Spring-MVC的第三天
  • (算法)Travel Information Center
  • (学习总结16)C++模版2
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞