mysql redo 日志 、 undo 日志 、binlog

事务四大特性 ACID 原子性 、一致性、隔离性、持久性

事务的隔离性由锁机制实现
事务的原子性、一致性、持久性由事务的redo 日志 和 undo 日志 保证
**redo log **是事务持久性的保证
undo log 是事务原子性的保证

redo log 是存储引擎层(innodb)生成的日志,记录的是物理级别上的页修改操作,比如页号xxx、偏移量yyy 写入了zzz数据,主要保证数据的可靠性
undo log 是存储引擎层(innodb)生成的日志,记录的是逻辑操作日志,比如对某一行数据进行了insert语句操作,那么undolog 就记录 一条与之相反的delete操作,主要用于 事务回滚(undo记录的是每个修改操作的逆操作)和一致性非锁定读(undo log 回滚行记录到某种特定的版本mvcc,即多版本并发控制)

在这里插入图片描述

在这里插入图片描述
redo日志是顺序写入磁盘的
在执行事务的过程执行一条语句,就可能产生若干条redo日志,这些日志是按照产生的顺序写入磁盘的,也就是使用顺序IO。
Redo log可以简单分为以下两个部分:

一是内存中重做日志缓冲 (redo log buffer),是易失的,在内存中
二是重做日志文件 (redo log file),是持久的,保存在磁盘中
在这里插入图片描述
设置 查看 buffer 大小
show variables like ‘innodb_log_buffer_size’;
在这里插入图片描述
刷盘策略

查看参数 innodb_flush_log_at_trx_commit;
show variables like ‘innodb_flush_log_at_trx_commit’;
在这里插入图片描述
在这里插入图片描述

page cache
在这里插入图片描述
** innodb 引擎 后台线程 **
在这里插入图片描述

在这里插入图片描述
事务提交时必须调用一次 fsync 操作,最安全的配置,保障持久性
在这里插入图片描述

在这里插入图片描述
事务提交时只做 write 操作,只保证将redo log buffer写到系统的页面缓存中,不进行fsync操作,因此如果MySQL数据库宕机时 不会丢失事务,但操作系统宕机则可能丢失事务
在这里插入图片描述
在这里插入图片描述

Undo log

在这里插入图片描述

undo log 类型:
在这里插入图片描述
在这里插入图片描述
undo 日志的作用
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

redo & undo总结

redo log 是事务持久性的保证
undo log 是事务原子性的保证
在事务中 更新数据
前置操作
其实是要先写入一个 undo log
undo log 会产生 redo log,也就是 undo log的产生会伴随着redo log 的产生,这是因为undo log也需要持久性的保护。
实际上当进行数据修改时不光要记录到undo中,使用undo这个动作还要记录到redo中,同Oracle中相似,在使用undo回滚时也会产生一定量的信息记录redo,总之,不管不管innodb怎样使用undo 这个信息都是要记录redo的。

下面是redo log + undo log的简化过程,便于理解两种日志的过程:

假设有A、B两个数据,值分别为1,2.

  1. 事务开始
  2. 记录A=1到undo log
  3. 修改A=3
  4. 记录A=3到 redo log
  5. 记录B=2到 undo log
  6. 修改B=4
  7. 记录B=4到redo log
  8. 将redo log写入磁盘
  9. 事务提交
    在这里插入图片描述

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

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

相关文章

Pytorch实现的LSTM、RNN模型结构

一、LSTM模型 import torch from torch import nn import torchvision.datasets as dsets import torchvision.transforms as transforms import matplotlib.pyplot as plttorch.manual_seed(1)# Hyper Parameters EPOCH 1 # 训练整批数据多少次, 为了节约时间, 我们…

BMS电池管理系统的蓝牙芯片 国产高性能 低功耗蓝牙Soc芯片PHY6222

电池管理系统是对电池进行监控与控制的系统,将采集的电池信息实时反馈给用户,同时根据采集的信息调节参数,充分发挥电池的性能。但是,前技术中,在管理多个电池时,需要人员现场调试与设置,导致其…

科学家首次为地球“全面体检”;国产光刻机或系误传;推特或将按月收费丨RTE开发者日报 Vol.52

开发者朋友们大家好: 这里是「RTE 开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

【Linux初阶】信号入门2 | 信号阻塞、捕捉、保存

文章目录 ☀️前言☀️一、信号阻塞🌻1.信号其他相关常见概念🌻2.信号在内核中的表示 ☀️二、信号捕捉(重点)🌻1.用户态 & 内核态🌻2.如何判断进程处于用户态或内核态🌻3.OS接口的访问方法…

uniapp——生成一个签字板

在开发项目中有签名/签字的需求&#xff0c;以下实现&#xff1a; <template><view class"new_file" v-if"showAutograph"><view class"popupBox"><view class"popupTopBox">签字板</view><canvas c…

分布式id的概述与实现

文章目录 前言一、分布式id技术选型二、雪花算法三、在项目中集成雪花算法 前言 随着业务的增长&#xff0c;数据表可能要占用很大的物理存储空间&#xff0c;为了解决该问题&#xff0c;后期使用数据库分片技术。将一个数据库进行拆分&#xff0c;通过数据库中间件连接。如果…

QT-day1

实现华清远见登陆界面 #include "mywnd.h" #include <iostream> #include <QDebug> #include <QPushButton> #include <QLineEdit> #include <QLabel>MyWnd::MyWnd(QWidget *parent): QWidget(parent) {//设置固定窗口大小长400&…

大数据-玩转数据-oracel字符串分割转化为多列

一、建表 create table split_string_test(id integer primary key,test_string varchar2(500) );二、插入测试数据 insert into split_string_test values(1, 10,11,12,13,14,22); insert into split_string_test values(2, 22,23,24); insert into split_string_test valu…

Discuz论坛网站首页窄屏自定义宽度修改教程

discuz论坛管理中心默认有窄屏和宽屏的选择&#xff0c;窄屏默认是960px宽度&#xff0c;很多论坛为了页面美观&#xff0c;基本都是1200px的宽度&#xff0c;如何修改DZ论坛首页窄屏宽度大小的呢&#xff1f;今天飞飞和你们分享。 1、在网站根目录中依次打开文件 /template/de…

功能定义-变道碰撞预警

功能概述 变道碰撞预警(Lane Change Warning)功能包括两个子功能&#xff1a; ——盲区监测(Blind Spot Detection)&#xff0c;其功能表现为实时监测驾驶员视野盲区&#xff0c;并在其盲区内出现其他道路使用者时发出提示或警示信息 ——接近车辆报警(Closing Vehicle Warnin…

GitHub平台 Bookget操作

以bookget为例&#xff0c;熟悉github平台。 https://github.com/deweizhu/bookget 选择该界面中的“Wiki”&#xff0c;右侧边栏中是文章的结构大纲。 下载bookget软件。 依照说明&#xff0c;安装bookget环境。

Docker 网络学习

docker的网络模式 当你开始大规模使用Docker时&#xff0c;你会发现需要了解很多关于网络的知识。Docker作为目前最火的轻量级容器技术&#xff0c;有很多令人称道的功能&#xff0c;如Docker的镜像管理。然而&#xff0c;Docker同样有着很多不完善的地方&#xff0c;网络方面…