MySQL__三大日志

文章目录

😊 @ 作者: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共聚来恢复数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/5405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gateway Predicate断言(谓词)

是什么 Spring Cloud Gateway匹配路由作为Spring WebFlux HandlerMapping基础设施的一部分。 Spring Cloud Gateway包含许多内置的路由谓词工厂。 所有这些谓词都匹配HTTP请求的不同属性。 您可以使用逻辑 and 语句来联合收割机组合多个路由谓词工厂。 Predicate就是为了实现一…

TiDB系列之:TiDB数据库账号权限,创建TiDB账号,创建数据库,创建表,插入数据

TiDB系列之:TiDB数据库账号权限,创建TiDB账号,创建数据库,创建表,插入数据 一、TiDB账号权限二、创建TiDB账号三、创建数据库,创建表,插入数据一、TiDB账号权限 TiDB账号权限可以分为系统级权限和对象级权限两种,具体如下: 系统级权限: ALL PRIVILEGES:拥有所有权限…

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像

基于EBAZ4205矿板的图像处理:03使用VIO调试输出HDMI视频图像 在zynq调试时VIO是真的方便,特此写一篇博客记录一下 先看效果 项目简介 下面是我的BD设计,vtc用于生成时序,注意,2021.2的vivado的vtcIP是v6.2版本&…

Stm32CubeMX 为 stm32mp135d 添加 adc

Stm32CubeMX 为 stm32mp135d 添加 adc 一、启用设备1. adc 设备添加2. adc 引脚配置2. adc 时钟配置 二、 生成代码1. optee 配置 adc 时钟和安全验证2. linux adc 设备 dts 配置 bringup 可参考: Stm32CubeMX 生成设备树 一、启用设备 1. adc 设备添加 启用adc设…

JAVA前端快速入门基础_javascript入门(03)

写在前面:本文用于快速学会简易的JS,仅做扫盲和参考作用 本章节主要介绍JS的事件监听 1.什么是事件监听 事件:是指发生在HTML端的事件,主要指以下几种。 1.按钮被点击 2.鼠标移动到元素上 3.按到了键盘 事件监听:当触发了事件时,JS会执行相…

vue3、element-plus递归实现动态菜单

vue3、element-plus递归实现动态菜单 使用场景:动态菜单为什么使用递归递归在动态菜单中的实现 使用场景:动态菜单 动态菜单是指菜单项的数量和层次结构可能是动态的,通常来自后端或用户输入。这些菜单的特征包括: 多层嵌套&…

真渗透小结

sql 有框就测 关注和数据库有交互的参数,如查询用户信息时的id字段 xss 有框就测 文件上传 有上传点就测,如头像上传文件上传 csrf 有功能点就测,例如增删改查 要看数据包参数的 文件包含 rce ssrf xxe 反序列化 数据包关注 网站资源文件…

【webrtc】MessageHandler 3: 基于线程的消息处理:以sctp测试为例

消息处理可以用于模拟发包处理G:\CDN\rtcCli\m98\src\net\dcsctp\socket\dcsctp_socket_network_test.cc 这个实现中,onMessage还是仅对了一种消息进行处理,就是接收则模式下,打印带宽。当然,可能程序有多个消息,分别在不同的onmessage中执行?SctpActor:以一个恒定的速率…

【大语言模型LLM】-基于ChatGPT搭建客服助手(1)

🔥博客主页:西瓜WiFi 🎥系列专栏:《大语言模型》 很多非常有趣的模型,值得收藏,满足大家的收集癖! 如果觉得有用,请三连👍⭐❤️,谢谢! 长期不…

Springboot实现串口(RS232)控制【最新】

串口通讯协议(RS232),没记错的话应该是属于物理层协议。这个一般都是用C去写的,但我们开发一个web系统还去依靠其他的,不如直接集成到我们的项目中来。   还是老规矩,代码可以直接cv就用。拒绝强制关注和留坑! 目前没…

利用大型语言模型提升个性化推荐的异构知识融合方法

在推荐系统中,分析和挖掘用户行为是至关重要的,尤其是在美团外卖这样的平台上,用户行为表现出多样性,包括不同的行为主体(如商家和产品)、内容(如曝光、点击和订单)和场景&#xff0…

C++ 堆结构和堆排序(从顶到底/从底到顶的大顶堆)+ 优化

一、堆结构和堆排序 (1)heapInsert,向上调整大根堆 和 heapify,向下调整大根堆 // i位置的数,向上调整大根堆 // arr[i] x,x是新来的!往上看,直到不比父亲大,或者来到0…

LLM系列(2):开源LLM Promp调优之道进阶指南

LLM系列(2):开源LLM Promp调优之道进阶指南 随着大模型在不同领域场景的应用,AI 技术的落地方式也有了很大的颠覆,基于大模型的 AI 技术方案重构已成为当前热点和未来趋势。但另一方面,面向不同领域场景构建行业专属大模型,对底层计算资源要求比较高,通常需要大量的 GPU…

升级cmake

要升级CMake,您可以按照以下步骤进行操作: 下载最新版本:首先,您需要从CMake官方网站下载最新版本的CMake。他们提供了适用于各种操作系统的安装程序。 卸载旧版本(可选):在安装新版本之前&…

使用Gradio搭建聊天UI实现质谱AI智能问答

一、调用智谱 AI API 1、获取api_key 智谱AI开放平台网址: https://open.bigmodel.cn/overview 2、安装库pip install zhipuai 3、执行一下代码,调用质谱api进行问答 from zhipuai import ZhipuAIclient ZhipuAI(api_key"xxxxx") # 填写…

短视频交友系统搭建重点,会用到哪些三方服务?

在搭建短视频交友系统时,为了确保系统的稳定性、安全性和用户体验,通常需要用到多种第三方服务。以下是搭建短视频交友系统时可能用到的关键第三方服务: 云服务提供商:如阿里云、腾讯云等,提供稳定、可扩展的服务器资源…

如何消除SmartScreen“未知发布者”警告?

在互联网高速发展、应用程序遍地开花的当今时代,作为企业,我们通常会开发自己的应用程序来开展自己的业务,以便与客户建立更深入的联系。不少应用程序所有者可能会面临一个难题,那就是用户下载时,系统会弹出SmartScree…

nuxt3项目服务端bulid后在本地浏览的3种方式(nuxi preview、Node.js Server、PM2)

你也许会问有了开发调试本地浏览,为什么还要服务端构建之后在本地浏览? 举个简单例子 在 Nuxt 3 服务端打包中,由于运行环境不同,无法直接访问 process 对象。服务端打包通常是在 Node.js 环境中进行的,而 process 对象…

GO语言核心30讲 进阶技术 (第二部分)

原站地址:Go语言核心36讲_Golang_Go语言-极客时间 一、接口类型的合理运用 1. 接口类型只包含方法,不包含字段。 方法集合就是它的全部特征。 任何数据类型,只要实现了接口的方法集合全部,那么它就是这个接口的实现类型 2. 怎么…

设计模式之代理模式ProxyPattern(六)

一、代理模式介绍 1、什么是代理模式? 代理模式是一种结构型设计模式,它允许为其他对象提供一个替代品或占位符,以控制对这个对象的访问。 2、代理模式的角色构成 抽象主题(Subject):定义了真实主题和代…