详解Mysql中redo log、undo log、bin log

目录

  • 1 redo log(重做日志)
  • 2 undo log(回滚日志)
  • 3 Binlog(二进制日志)
  • 4 两阶段提交
    • 4.1 执行过程
    • 4.2 系统崩溃后重启如何刷新数据
    • 4.3 redo log 和 bin log区别

MySQL是一个关系型数据库管理系统,它使用SQL(Structured Query Language)作为主要的数据操作语言。在MySQL中,特别是在InnoDB存储引擎中,数据修改过程涉及到两种重要的日志:redo log(重做日志)和undo log(回滚日志)。

1 redo log(重做日志)

Redo log用于保证事务的持久性。当你修改数据时,这些修改首先会被写入到redo log中,并且几乎是同时写入到内存中的数据页。如果数据库系统发生崩溃,那些还没有被持久化到磁盘上的内存页修改可以通过重播redo log来恢复。Redo log采用的是循环写入的方式,它分为两个部分:一部分在内存中,称为log buffer,另一部分在磁盘上。

修改数据的步骤通常包括:

  • 将修改操作写入到redo log buffer。
  • 修改内存中的数据页。
  • 在适当的时候,将redo log buffer中的内容刷新(flush)到磁盘上。

2 undo log(回滚日志)

Undo log用于多个目的,包括回滚事务中未提交的操作,以及提供MVCC(多版本并发控制)时所需的旧版本数据。当对数据进行修改时,会在undo log中记录一个逆向操作。如果一个事务需要回滚,或者其他事务需要看到修改前的数据,undo log将被用来恢复或者提供数据的旧版本。

修改数据时,undo log的流程通常如下:

  • 记录数据修改前的状态到undo log。
  • 执行数据修改。
  • 如果事务提交,则最终会清除掉相应的undo log记录。如果发生回滚,则使用undo log来撤销已经执行的修改。

3 Binlog(二进制日志)

Binlog是MySQL中的二进制日志,用于记录数据库的逻辑改变,如对数据库中的数据进行了怎样的操作(增删改)。通过Binlog,可以对数据库进行基于时间点的恢复、数据复制和主从同步。Binlog的存在为数据备份、恢复和同步提供了强大的支持。

4 两阶段提交

两阶段提交发生在redo log和bin log日志写入阶段,把日志写入和日志提交分为两个阶段(prepare准备、commit提交)

4.1 执行过程

  1. 当执行一条update语句的时候,首先会记录到buffer pool里面,然后对应在undo log中更新历史数据,在redo log中更新修改数据并修改状态为prepare。
  2. 当事务commit的时候会向bin log里面写入修改逻辑,同时修改undo log状态为commit。

之后修改过后的数据是异步写入磁盘的。

4.2 系统崩溃后重启如何刷新数据

  1. 当写入undo log之前崩溃,这时undo log和bin log中都没有数据,此时满足数据一致性不需要进行操作。
  2. 当在写入bin log之前崩溃,此时根据undo log中的事务id去bin log中查找是没有数据的,因此会回滚。
  3. 当在写入bin log之后崩溃,无论undo log有没有修改为commit状态,都会把数据更新到磁盘。

4.3 redo log 和 bin log区别

  • redo log是innodb存储引擎独有的,binlog是不区分存储引擎
  • 记录内容不同, redo log是物理日志,记录事务具体操作的内容; bin log是逻辑日志,记录事务操作过程
  • 写入时间不同,先写入redo log,再写入binlog
  • redo log是循环使用文件,bin log每次新增一个文件

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

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

相关文章

对象注入的几种方式

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:JavaEE 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 注入对象 1. 属性注入2. 构造方法注入3. S…

微信小程序uniapp+django+python的酒店民宿预订系统ea9i3

Android的民宿预订系统设计的目的是为用户提供民宿客房、公告信息等方面的平台。 与PC端应用程序相比,Android的民宿预订系统的设计主要面向于民宿,旨在为管理员和用户、商家提供一个Android的民宿预订系统。用户可以通过Android及时查看民宿客房等。 An…

随机选择器

说明&#xff1a; 在阅读本公司源码时发现了一段实现随机选择器的代码&#xff0c;感觉不错&#xff0c;现分享出来。 public class RandomSelector {private final NavigableMap<Integer, Object> map new TreeMap<>();private Integer total 0;Random random …

滑动窗算一下rms

clear clc close all fs20; width16; height16; t(1/fs:1/fs:200); signalsin(2*pi*0.1)rand(length(t),1)3/100*t; figure(1) set(gcf,units,centimeters,Position,[1,2height,width,height]) plot(t,signal) smoothed_avg_values smooth(signal, 20); % 这里的10是…

013 Linux_互斥

前言 本文将会向你介绍互斥的概念&#xff0c;如何加锁与解锁&#xff0c;互斥锁的底层原理是什么 线程ID及其地址空间布局 每个线程拥有独立的线程上下文&#xff1a;一个唯一的整数线程ID, 独立的栈和栈指针&#xff0c;程序计数器&#xff0c;通用的寄存器和条件码。 和其…

【C++】深度解剖多态

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是多态&#xff0c;熟练掌握多态的定义&a…

【SpringCloud】微服务重点解析

微服务重点解析 1. Spring Cloud 组件有哪些&#xff1f; 2. 服务注册和发现是什么意思&#xff1f;Spring Cloud 如何实现服务注册和发现的&#xff1f; 如果写过微服务项目&#xff0c;可以说做过的哪个微服务项目&#xff0c;使用了哪个注册中心&#xff0c;常见的有 eurek…

图片在div完全显示

效果图&#xff1a; html代码&#xff1a; <div class"container" style" display: flex;width: 550px;height: 180px;"><div class"box" style" color: red; background-color:blue; width: 50%;"></div><div …

python实现回溯算法

什么是回溯算法&#xff1f; 回溯算法是一种经典的解决组合优化问题、搜索问题以及求解决策问题的算法。它通过不断地尝试各种可能的候选解&#xff0c;并在尝试过程中搜索问题的解空间&#xff0c;直到找到问题的解或者确定问题无解为止。回溯算法常用于解决诸如排列、组合、…

30m二级分类土地利用数据Arcgis预处理及获取

本篇以武汉市为例&#xff0c;主要介绍将土地利用数据转换成武汉市内各区土地利用详情的过程以及分区统计每个区内各地类面积情况&#xff0c;后面还有制作过程中遇到的面积制表后数据过小的解决方法以及一些相关的知识点&#xff1a; 示例数据下载链接&#xff1a;数据下载链…

2024年阿里云服务器新用户购买一个月多少钱?

阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2G3M带宽服务器99元12个月&#xff0c;轻量应用服务器2核4G4M带宽165元12个月&#xff0c;4核16G服务…

UnicodeDecodeError: ‘gbk‘和Error: Command ‘pip install ‘pycocotools>=2.0

今天重新弄YOLOv5的时候发现不能用了&#xff0c;刚开始给我报这个错误 subprocess.CalledProcessError: Command ‘pip install ‘pycocotools&#xff1e;2.0‘‘ returned non-zero exit statu 说这个包安装不了 根据他的指令pip install ‘pycocotools&#xff1e;2.0这个根…

哥德巴赫猜想

七十年代末八十年代初&#xff0c;哥德巴赫猜想在中国风靡一时&#xff0c;来源于徐迟的一篇同名报告文学。我还是小孩子&#xff0c;记得大人们叽里咕噜疯传。 “哇&#xff0c;不得了。陈景润证明了1&#xff0b;2&#xff1d;3&#xff0c;离1&#xff0b;1&#xff1d;2就…

misc30

rar解压得到 发现只有中间的图片可以分析&#xff0c;另外两个都有密码 那就先分析星空&#xff0c;属性里面发现 使用该密码可以解压doc文本&#xff0c;发现doc隐写 使用此密码&#xff08;Hello friend!)解压图片,得到一个二维码 扫码得到flag flag{welcome_to_ctfshow}

【Web】浅聊Java反序列化之Rome——关于其他利用链

目录 前言 JdbcRowSetImpl利用链 BasicDataSource利用链 Hashtable利用链 BadAttributeValueExpException利用链 HotSwappableTargetSource利用链 前文&#xff1a;【Web】浅聊Java反序列化之Rome——EqualsBean&ObjectBean-CSDN博客 前言 Rome中ToStringBean的利用…

(001)UV 的使用以及导出

文章目录 UV窗口导出模型的主要事项导出时材质的兼容问题unity贴图导出导出FBX附录 UV窗口 1.uv主要的工作区域&#xff1a; 2.在做 uv 和贴图之前&#xff0c;最好先应用下物体的缩放、旋转。 导出模型的主要事项 1.将原点设置到物体模型的底部&#xff1a; 2.应用修改器的…

java web 知识 jsp

1. jsp: Java Server Page jsp 文件 必须 由 应用服务器 部署(启动项目) ,部署后 用浏览器才能访问 2. jsp 运行原理: idea 编译 部署项目的 位置: C:\Users\74163\AppData\Local\JetBrains\IntelliJIdea2021.1\tomcat\c5b2c807-b7a6-4948-a9ca-71919e55968b 这个 目录 下…

线程和进程

参考链接&#xff1a; 1.基本概念 进程&#xff1a;Windows系统中&#xff0c;一个运行的xx.exe就是一个进程。例如打开浏览器就是一个进程 线程&#xff1a;进程中的一个执行任务&#xff08;控制单元&#xff09;&#xff0c;负责当前进程中程序的执行。一个进程至少有一个…

【Web】关于Java反序列化那些实现机制的朴素通识

目录 原生⚔ 自定义 基于 Java 原生序列化机制&#xff1a; 基于自定义序列化机制&#xff1a; 基于Bean⚔基于Field 基于 Bean 的反序列化&#xff1a; 基于 Field 的反序列化&#xff1a; 常见序列化协议归类 原生⚔ 自定义 基于 Java 原生序列化机制&#xff1a; 特…

Android14 Handle机制

Handle是进程内部, 线程之间的通信机制. handle主要接受子线程发送的数据, 并用此数据配合主线程更新UI handle可以分发Message对象和Runnable对象到主线程中, 每个handle实例, 都会绑定到创建他的线程中, 它有两个作用,: (1) 安排消息在某个主线程中某个地方执行 (2) 安排…