Redis__三大日志

文章目录

😊 @ 作者:Lion J
💖 @ 主页: https://blog.csdn.net/weixin_69252724
🎉 @ 主题:Redis__三大日志
⏱️ @ 创作时间:2024年04月30日


对于MySQL来说, 有三种类型的日志, Binlog、Undolog、Redolog

Undo Log

字面意思可以很容易的知道, 就是撤销日志的意思, 他的作用主要是将MySQL中的数据回到某个状态

Undo Log什么时候用到

  • 在每一个事务开始之前, MySQL 会将待修改的记录保存在Undo Log 中, 如果数据库崩溃或事务需要回滚时, MySQL就可以通过Undo Log日志, 将数据回滚到之前的状态

  • 在MySQL新增、修改、删除数据的时候, 在事务开始之前, 就会将数据写入到Undo Log 中. 事务在提交的时候, 并不会立刻删除Undo Log, InnoDB存储引擎 会对事务对应的Undo Log放入到待删除的列表中, 之后就通过后天的线程对删除列表进行删除处理.

注意Undo Log实际是一种逻辑日志 , 记录的是一个变化的过程.

就比如:SQL执行一个操作, delete操作, 那么Undo Log日志就会记录一个insert 操作; MySQL 执行一个 insert 操作, Undo Log就会生成一个delete记录;
意思就总和你对着干, 它会生成和你操作相反的日志记录

Undo Log的作用

Undo Log 对于MySQL实现事务来说, 起着至关重要的作用, 它实现了事务的原子性 和 多版本并发控制, --> MVCC

  • 实现事务原子性

    Undo Log 能够实现MySQL事务的原子性, 在事务的处理过程中, 如果MySQL出现了错误或者我想执行事务的回滚操作(执行rollback操作), MySQL可以利用Undo Log日志将数据库的数据恢复到之前的状态

  • 实现MVCC机制

    上面说了,在事务开始之前, MySQL会将要修改的数据放到Undo Log中, MySQL可以利用此时的旧版本数据副本或者快照以便让其他并发事务进行读取

举个例子

首先事务A在更新 id=1 的数据之前, 会将数据保存到Undo Buffer 中. 事务A没有提交之前, 此时如果事务B 开始, 需要查询id =1 的数据, 那么就从Undo Log 数据 中的快照数据进行一个返回,
Undo Buffer 就是一个 日志缓冲池, 定期将日志数据写入到磁盘中, 减少每次修改需要和磁盘进行IO操作

Redo Log

redo log 听名字就能看出来, 它是个重做日志, 指的是在数据库发生意外情况, 或者宕机, 操作造成数据丢失情况的时候, 可以重新执行某操作. 在MySQL中, 事务中修改任何数据, 都会将最新的数据写入到Redo Log中进行备份
--> (保险日志)

在MySQL中,随着事务操作的执行,就会产生Redo Log日志,在事务提交时会产生Redo Log并将其写入Redo Buffer,Redo Buffer也并不是随着事务的提交就会被立刻写入到磁盘中,而是等事务操作的脏页写入到磁盘之后 ,Redo Log的使命也就完成了,此时,Redo Log日志占用的空间可以重新利用,会被后续产生的Redo Log日志覆盖
脏页: 就是在内存中修改 但是没有返回磁盘的数据

Redo Log 原理

Redo Log 能够实现事务的持久性, 防止发生故障的时间点, 恰好有脏页未写入表的ibd文件中; 那么在下一次重启MySQL的时候, 就会根据Redo Log 来进行重做, 从而将未提交的事务进行持久化

Redo Log的写机制

Redo Log文件的内容是以顺序循环的方式写入文件的,写满时就会回到第一个文件,进行覆盖, 类型于循环链表

  • Write Pos 是当前记录的位置,一边写一边后移,写到最后一个文件末尾后就回到 0 号文件开头;
  • CheckPoint是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数 据文件;

图这就是一个重做文件组, 有四个重做日志文件

Binlog

Binlog记录所有MySQL数据库表结构变更以及表数据修改的二进制日志 ,不会记录select和show这类查询操作的日志。Binlog日志是以事件形式记录,还包含语句所执行的消耗时间。开启Binlog日志有以下两个最重要的使用场景。

使用主要有一下两个功能:

  • 主从复制:在主库里面开启binlog功能, 这样就可以把binlog传递给库, 从库拿到binlog后实现数据恢复,达到主从一致性
  • 数据恢复: 可以通过mysqlbinlog共聚来恢复数据
相关推荐
哈__19 小时前
MongoDB 平替新方案:金仓多模数据库驱动电子证照国产化落地
数据库·1024程序员节
微学AI19 小时前
国产数据库替代MongoDB的技术实践过程:金仓多模数据库在电子证照系统中的深度应用
数据库·人工智能·1024程序员节
TDengine (老段)19 小时前
TDengine 数据函数 ROUND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·1024程序员节
TDengine (老段)19 小时前
TDengine 数学函数 RAND 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
野犬寒鸦20 小时前
从零起步学习MySQL || 第十章:深入了解B+树及B+树的性能优势(结合底层数据结构与数据库设计深度解析)
java·数据库·后端·mysql·1024程序员节
GZ_TOGOGO20 小时前
Oracle OCP考试报名常见问题详解
数据库·oracle·ocp认证
睡不醒的猪儿20 小时前
nginx日志同步阿里云datahub后写入数据库
数据库·nginx·阿里云
xie_zhr20 小时前
【PB案例学习笔记】-46在数据窗口中编辑数据
数据库·his·1024程序员节·干货分享·pb·powerbuilder
小小的木头人20 小时前
Redis 集群安装指南
数据库·redis
星空的资源小屋20 小时前
Antares SQL,一款跨平台开源 SQL 客户端
数据库·人工智能·pdf·开源·电脑·excel·1024程序员节