【数据库】聊聊MySQL的日志,binlog、undo log、redo log

news2025/7/19 16:51:10

日志

在数据库中,如何保证数据的回滚,以及数据同步,系统宕机后可以恢复到原来的状态,其实就是依靠日志。
其中bin log是Server层特有的,redo log是Innodb存储引擎特有的。
bin log 是逻辑日志,主要记录这条SQL的原始逻辑,比如 name 设置为abc
redo log是物理日志,在某个数据页上做了什么修改。

一个案例

假设我们现在要对t表,(id,name) update t set name=‘qxlx’ where id = 1;设置操作,
根据上一篇数据库基础架构篇,这条SQL执行的流程都会走连接器,查询缓存,分析器,优化器,最后到执行器。
1.执行器根据建表的存储引擎来觉得使用哪个存储引擎,一般都是InnoDB。因为InnoDB中存在change buffer这样的机制,所以会先查询change buffer中有没有数据,如果有的话,直接操作更新,没有的话会先从磁盘中查询数据,返回给执行器。之后写入undo log 日志。

2.如何保证SQL没有提交,可以回滚到之前的状态呢,
在执行如上的SQL的之后,会先写入undo log,进行标记原始数据是什么 比如name = abc, 如果这个SQL没有提交事务,那么数据就会回滚到之前的状态 name=abc。
3.写入bin log日志。其实这个流程比较复杂,我们来慢慢梳理以下,具体的执行流程图在如下。
a.先从存储引擎中获取id=1这样数据,如果在内存中的话,那么直接返回,否则话,从磁盘中读取到数据。将数据返回给执行器
b.执行器会进行数据增加操作,name=‘qxlx’,写入新的一行,将数据更新到内存中,redo log此时处于prepare阶段,Server层写入bin log,存储引擎将redo log提交。
在这里插入图片描述

WAL

在写redo log日志的时候,一般来说,我们可以先把数据写到临时的缓存中,然后等到一定的时候比如mysql空闲的时候,在同步写回到磁盘中。而这样的话可以避免大量的IO 和 数据查找操作。这种机制就是 writer ahead logging技术。而redo log的区域是固定的,也就是写满的之后,需要强制刷新数据到磁盘中。
而如果要强制更新到磁盘中,可以通过以下参数强制更新到磁盘中。sync_binlog设置成1,也可以保证bin log 实时存储到磁盘中,保证系统重启后数据不会丢失。

innodb_flush_log_at_trx_commit = 1 
sync_binlog = 1 

其实可以想一下,一个学生正在听课,老师讲的比较快的时候,是赶不上讲笔记全部整理到自己的笔记本上,可以先写到抄本上,然后在下课后,讲笔记整理到笔记本上。

两阶段提交

以上在写入bin log和 redo log的时候,先写redo log 然后bin log redolog提交,需要这么麻烦嘛,我们这里分析以下。如果将两个过程分开来写的话
1.先写bin log,然后此时系统宕机了,重启之后,因为redo log没有写入,bin log(name=‘qxlx’) ,如果需要按照bin log进行数据同步到从库上,那么数据就是错误的,数据库本上是(name=‘abc’)
2.先写redo log,然后系统宕机,重启之后,redo log (name=‘qxlx’) 但是数据库 (name=‘abc’) ,会按照redo log进行重新更新数据,此时数据被更新为 (name=‘qxlx’) 所以数据不一致了,所以需要按照两阶段提交的方式来执行保证数据的一致性。

在这里插入图片描述
资料来源:mysql45讲

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

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

相关文章

Win11安装Docker

一、进入Docker官网首先先到Docker官网下载最新官方Docker for Windows链接:Docker下载在官网内可以查看到Docker的开发文档:根据官网提示,Windows环境下下载Docker必须满足:Docker for Windows requires 64bit Windows 11 Pro an…

0311记录

题目1:B. Not Dividing 这个题有点奇怪,他的大意就是给定一个数组,可以对数组中的任意一个数做+1操作,保证a(i1)不被a(i)整除,但是总次数不能超过2*n 感觉这就是一个结论吧,就是随便加&#xff…

CSS看这一篇就够啦,CSS基础大全,可用于快速回顾知识,面试首选

1 CSS简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称。 CSS 是也是一种标记语言,主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、 边距等)以及版面的布局和外观…

【Linux】linux | 修改系统编码 |  增加字体处理 | 图片处理字体变成方块

一、说明1、CentOS7二、修改系统编码编辑文件vi /etc/locale.conf修改编码并保存LANGzh_CN.UTF-8配置生效source /etc/locale.conf1)修改系统编码,只是让系统支持中文编码2)不解决文字不显示的问题;往后看三、解决字体不显示问题非…

【玩转c++】priority_queue的介绍和模拟实现

本期主题:priority_queue的介绍和模拟实现博客主页: 小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐priority_queue介绍和使用1.1.priority_queue介绍1. 优先队列是一种容器适配器,根…

数组边遍历(for循环)边删除为什么删不干净 及三种实现删除的方法

文章目录1、为什么删不干净倒序删迭代器lambda表达式删除为什么说数组边for循环遍历边删除会出现删不干净的情况1、为什么删不干净 先写一个例子:可以先猜一下控制台会打印出什么内容? public class removeIterator {public static void main(String[]…

Node.js 里 Express工程框架中的代码解析

新建一个工程 express -e blog配置入口文件 打开项目内的app.js ,在倒数第二行写入如下代码: app.listen(3000, function () {console.log(server is running in 3000) })这样就让服务运行在了3000端口 检查 打开终端输入: node app在打开浏览器访…

client-go实战之十:标签选择(labels.Selector),重要

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 系列文章链接 client-go实战之一:准备工作client-go实战之二:RESTClientclient-go实战之三:Clientsetclient-go实战之四:…

智能优化算法求解CEC2005中F1-F25的种群动态变化图(视频)

CEC2005 测试集共包含 25 个测试问题, 即 f1−f25f_{1}-f_{25}f1​−f25​ 。根据问题的特征, 可进一 步将其分为 4 类: 单峰问题 f1−f5f_{1}-f_{5}f1​−f5​ , 基本多峰问题 f6−f12f_{6}-f_{12}f6​−f12​ , 扩展多峰问题 f13−f14f_{13}-f_{14}f13​−f14​ 和混合复合问…

STL源码学习(1)-空间配置器

文章目录1. SGI空间配置器1.1 std::allocator1.2 std::alloc1.3 对象构造与析构:construct和destroy1.4 空间配置与释放:allocate和deallocate1.4.1 第一级空间配置器1.4.2 第二级空间配置器1.4.2.1 空间配置函数 allocate1.4.2.2 空间释放函数 dealloca…

C++回顾(二十二)—— stack容器 与 queue容器

22.1 stack容器 &#xff08;1&#xff09; stack容器简介 stack是堆栈容器&#xff0c;是一种“先进后出”的容器。stack是简单地装饰deque容器而成为另外的一种容器。添加头文件&#xff1a;#include <stack> &#xff08;2&#xff09;stack对象的默认构造 stack…

Web漏洞-XXE漏洞(详细)

XXE漏洞XXE全称为XML External Entity Injection即XMl外部实体注入漏洞原理&#xff1a;XXE漏洞发生在应用程序解析XML输入时&#xff0c;没有禁止外部实体的加载&#xff0c; 导致用户可以控制外部的加载文件&#xff0c;造成XXE漏洞。XXE漏洞触发点往往是可以上传xml文件的位…

行测-判断推理-类比推理-逻辑关系-交叉关系

花瓶和瓷器是交叉关系&#xff0c;除了瓷花瓶&#xff0c;还有塑料花瓶等花瓶中有一部分是瓷器&#xff0c;瓷器中有一部分是花瓶A选项&#xff1a;电视机是电器的一种&#xff0c;种属关系&#xff0c;排除AB选项&#xff1a;中药和植物是交叉关系&#xff0c;还有动物入药等&…

< 开源项目框架:推荐几个开箱即用的开源管理系统 - 让开发不再复杂 >

文章目录&#x1f449; SCUI Admin 中后台前端解决方案&#x1f449; Vue .NetCore 前后端分离的快速发开框架&#x1f449; next-admin 适配移动端、pc的后台模板&#x1f449; django-vue-admin-pro 快速开发平台&#x1f449; Admin.NET 通用管理平台&#x1f449; RuoYi 若…

SpringBoot 整合 Activiti7

一.pom依赖引入 通过该 pom.xml 文件所导入的坐标&#xff0c;我们就可以实现 activiti7 与 Springboot 整合 <!--activiti7与SpringBoot整合的相关依赖--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

【教学典型案例】04.生产环境app打包导致不能自动升级

目录一&#xff1a;背景介绍现象原因产生影响二&#xff1a;问题复现过程1、注册服务空间2、添加Admin项目3、创建uniapp项目4、App打包5、发布到升级中心三&#xff1a;总结一&#xff1a;背景介绍 现象 用户端安装了74版本的app&#xff0c;不能自动升级。 原因 产生该问…

win10 +cuda11.3.1+VS2019-社区版+drive445.87

参考&#xff1a;https://blog.csdn.net/kunhe0512/article/details/124331221这里的推荐离线安装包的方式进行cuda安装&#xff0c;官方也给了conda的安装方式&#xff0c;我试过一直出问题&#xff0c;所以安装包的方式比较靠谱&#xff0c;windows比linux下更方便。vs2019-c…

Uipath Excel 自动化系列20-Insert Chart(插入图表)

活动描述 Insert Chart(插入图表)&#xff1a;在Excel工作表的指定位置插入图表&#xff0c;该活动需与Use Excel File 活动选择的 Excel 文件一起使用。 使用如下图&#xff1a; Insert Chart(插入图表)属性配置 属性 作用 DisplayName 在设计器面板中设置活动显示的名称…

计算机网络笔记——计算机网络体系结构

计算机网络笔记——计算机网络体系结构1.计算机网络体系结构1.1 计算机网络概述1.1.1 计算机网络的概念1.1.2 计算机网络组成物理组成工作方式组成功能组成1.1.3 计算机网路的功能1.1.4 计算机网络的分类1.1.5 计算机网络的标准化公工作及相关组织1.2 计算机网络体系结构与参考…

Python调用Shell命令 (python,shell 混合编程)

Python经常被称作“胶水语言”&#xff0c;因为它能够轻易地操作其他程序&#xff0c;轻易地包装使用其他语言编写的库&#xff0c;也当然可以用Python调用Shell命令。 用Python调用Shell命令有如下几种方式&#xff1a; 1. os.system os.system("The command you want&…