MySql三大日志——(八股)

undolog,redolog,binlog三大日志

undo log是Innodb存储引擎层生成的日志,实现了事物的原子性,主要用于事务回滚和MVCC,在事务没提交之前,Innodb会先记录更新前的数据记录undo log中,回滚时利润undo log来进行回滚。

redo log是Innodb存储引擎层的日志,属于物理日志,记录了某个数据页做了什么修改,实现了事物的持久性,主要用于掉电等故障恢复。比如某个事务提交了,脏页数据还没有刷盘,如果MySql机器断电了,脏页的数据就丢失了,MySql重启后可以通过redolog日志,可以将已提交事物的数据恢复回来。

binlog是Server层生成的日志,主要用于数据备份和主从复制。在完成一条更新操作后,Server层会生成一条binlog,等之后事务提交的时候,会将事务执行过程中产生的所有binlong同意写入binlog文件。binlog文件记录了所有数据库表结构变更和表和数据修改的日志,不会记录查询类的操作。

redoLog和binlog的使用场景:

使用对象不同:

binlog是MySQL的Server层实现的日志,所有存储引擎都可以使用

redolog是Innodb存储引擎实现的日志

文件格式不同:

binlog有3中文件格式类型:分别是STATEMENT,ROW,MIXED

STATEMENT:每一条修改数据的SQL都会被记录到BINLOG中(相当于记录了逻辑操作,所以针对这种格式,binlog可以被称为逻辑日志),主从复制中slave端再根据SQL语句重现

ROW:记录行数据最终被修改成什么样了(这种格式的日志,就不能称为逻辑日志了)。ROW的缺点是每行数据的变化结果都会被记录,比如批量update语句,更新多少行数据就会产生多少条记录,是binlog文件过大,而在STATEMENT格式下只会记录下一条update语句。

MIXED:包含了STATEMENT和ROW模式,它会根据不同的情况自己使用ROW模式和STATEMENT模式

redolog是物理日志,记录的是某个数据页做了什么修改,比如对什么表什么数据页的偏移量的地方做了什么更新

写入方式不同:

binlog是追加写,写满一个文件,就创建一个新的文件继续写,不会覆盖以前的日志,保存的是全量的日志

redolog是循环写,日志空间大小是固定的,全部写满就从太开始,保存为被刷入磁盘的脏页日志。

用途不同:

binlog用于备份恢复,主从复制

redolog用于掉电故障恢复

相关推荐
zlwool8 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
软件聚导航11 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
2601_9609067211 小时前
1X发布自己的世界模型1XWM
mysql·mongodb·rabbitmq·memcached
学习星球11 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
GoppViper12 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
2601_9621741712 小时前
Redis 简介
数据库·redis·wpf
夜雪一千13 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
ruleslol13 小时前
MySQL: OR查询为什么会导致索引失效
mysql
Highcharts.js14 小时前
Highcharts 下钻(Drilldown)柱状图 Demo
数据库·信息可视化·hbase·highcharts·drilldown·js模块·下钻图表