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

MySQL三大日志

1. redo log

1.1 特点

  • InnoDB存储引擎独有
  • 物理日志,记录在数据页上做的修改
  • MySQL拥有了崩溃恢复能力,保证事务的持久性

1.2 刷盘时机

  • 事务提交时
  • log buffer 空间使用大约一半时
  • 事务日志缓冲区满
  • InnoDB 定期执行检查点Checkpoint
  • 后台刷新线程,1s一次
  • MySQL 关闭

1.3 刷盘策略

  • 设置为 0 的时候,表示每次事务提交时不进行刷盘操作,最不安全。
  • 设置为 1 的时候,表示每次事务提交时都将进行刷盘操作,最安全。
  • 设置为 2 的时候,表示每次事务提交时都只把 log buffer 里的 redo log 内容写入 page cache,安全性介于0和1之间。

2. bin log 

2.1 特点

  • 属于MySQL Server 层
  • 逻辑日志,记录内容是语句的原始逻辑
  • 用于MySQL数据库的数据备份,保证数据一致性

2.2 记录格式

  • statement  记录的内容是SQL语句原文  
  • row  为解决数据不一致的问题,记录的内容包括SQL语句和具体数据
  • mixed  根据MySQL判断这条SQL语句是否可能引起数据不一致的结果决定使用row格式或statement格式。

2.3 刷盘策略

  • 0表示每次提交事务都只write,由系统自行判断什么时候执行fsync
  • 为1表示每次提交事务都会执行fsync
  • N(N>1)表示每次提交事务都write,但累积N个事务后才fsync

3. undo log

3.1 特点

  • 保证事务的原子性

3.2 作用

  • 事务回滚时将数据恢复到修改前的状态
  •  MVCC的实现,事务通过 undo log 读取之前的版本数据

4.redo log vs bin log

位置写入时机作用
redo log存储引擎层事务执行过程可以不断写入崩溃恢复
bin logserver层提交事务时才写入数据一致性

5. 两阶段提交

redo log的写入拆成了两个步骤preparecommit

 MySQL根据redo log日志恢复数据时,发现redo log还处于prepare阶段,并且没有对应binlog日志,就会回滚该事务。

从而解决了redo log 和 bin log 日志之间的逻辑一致问题。

相关文章:

  • 编写RedisUtil来操作Redis
  • Java中的finally字句
  • 006.Oracle事务处理
  • python爬虫如何写,有哪些成功爬取的案例
  • pytest -- 进阶使用详解
  • iproute 随手记
  • Spring Boot程序的打包与运行:构建高效部署流程
  • HarmonyOS—开发环境诊断的功能
  • MybatisPlus框架入门级理解
  • 安捷伦N5244A网络分析仪43.5GHz
  • 【PHP】PHP利用ffmreg获取音频、视频的详细信息
  • tomcat与servlet
  • 【Linux】信号量基于环形队列的生产消费模型
  • [AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯
  • 【办公软件篇】软件启动器Lucy打造自己的工具箱
  • [case10]使用RSQL实现端到端的动态查询
  • Android优雅地处理按钮重复点击
  • C# 免费离线人脸识别 2.0 Demo
  •  D - 粉碎叛乱F - 其他起义
  • JS变量作用域
  • js中的正则表达式入门
  • Laravel 实践之路: 数据库迁移与数据填充
  • laravel 用artisan创建自己的模板
  • Python实现BT种子转化为磁力链接【实战】
  • Python中eval与exec的使用及区别
  • scrapy学习之路4(itemloder的使用)
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 漂亮刷新控件-iOS
  • 通过git安装npm私有模块
  • 微信小程序--------语音识别(前端自己也能玩)
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 阿里云ACE认证学习知识点梳理
  • 阿里云ACE认证之理解CDN技术
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (145)光线追踪距离场柔和阴影
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)详解PHP处理密码的几种方式
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net core 6 redis操作类
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET上SQLite的连接
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET中GET与SET的用法
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [AAuto]给百宝箱增加娱乐功能