redo log 日志 与 undo log 日志工作原理
目录标题
- 1. redo log 日志
- 2. undo log 日志
- 3.总结

1. redo log 日志
redo log日志是 MySQL 数据中的重要日志之一,其本质是物理日志,存放于 数据库的数据目录中 ,名称为: ib_logfile 。它的功能主要是用于存放脏数据的日志(注:脏数据是数据库中刚产生的还没来得及写入磁盘的新数据),当数据发生故障时保证数据不丢失。 需要说明的是:事务提交时修改磁盘的数据仍然是 Buffer Pool 中的数据,redo log 只是为了保证 Buffer Pool 中新修改的数据不丢失,进而保证事务提交时的数据完整性,不能笼统地认为 redo log 是保存提交的数据的。
物理日志(如Redo Log):
记录的是数据页的物理变化,即实际的数据块的内容。
用于在系统崩溃后恢复未完成的事务。
例如,Redo Log记录了数据页从状态A变为状态B的具体字节变化。
为了数据安全,MySQL 数据库在运行的过程中,时时刻刻都在产生 redo log。
新更新的数据会首先写入 Buffer Pool 和 redo log 之中,然后当事务提交时才会写入磁盘,也就是说各种数据修改首先统一写入 Buffer Pool 和 redo log 之中,然后再统一写入磁盘。Buffer Pool 中的数据写入磁盘文件是受innodb_flush_log_at_trx_commit控制的,其配置的值为:0、1 和 2。其详细情况如下:
- 当配置为 0 时,主要受 InnoDB 存储引擎中的 Master 线程的周期控制,一般是一秒或十秒刷新一次。
- 当配置为 1 时,一旦事务提交,Buffer Pool 和 redo log 中的数据将立即写入磁盘,此时即便数据库宕机数据也能恢复,比较安全,但是可能会造成一定程度上的延时。
- 当配置为 2 时,事务提交,数据不会立即写入磁盘,此时如果数据库宕机,则可能会丢失部分数据,优点就是性能比较高。但是每次修改数据,redo log 中的数据都会有一个标识,这个标识叫 checkpoint,当数据库发生宕机时,数据是从最近的 checkpoint 中恢复数据的,最大程度减少数据丢失。
数据库中的innodb_flush_log_at_trx_commit的值可以使用下方的方法查询:
mysql> show global variables like 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 1 |
+--------------------------------+-------+
1 row in set (0.01 sec)
默认设置:MySQL 的默认设置通常是 innodb_flush_log_at_trx_commit = 1,这是为了确保数据的安全性。
生产环境:在生产环境中,根据应用的具体需求来选择合适的设置。对于大多数应用来说,innodb_flush_log_at_trx_commit = 2 是一个比较平衡的选择。
2. undo log 日志
undo log 是 MySQL 数据库中另一个重要的日志之一,其本质是一个逻辑日志,存放于 MySQL 数据库的表空间之中,也就是内存之中。它的主要作用是用于数据回滚。
逻辑日志是指记录了数据修改前的状态或逻辑操作的日志,而不是直接记录数据页的物理变化。具体来说,逻辑日志记录的是数据的旧值以及如何恢复这些旧值的操作。
当发了红包时,如果数据库恰巧发生故障,为了保证数据的安全(及修改的数据不会只修改一部分),就需要使用到数据的回滚,这时 undo log 日志就派上了用场。
**那么你知道undo log是怎么回滚日志的吗?**对于数据恢复来说,主要有两种方式,分别是:物理恢复和逻辑恢复,那么undo log就是通过逻辑恢复的方式恢复数据。例如:宋押司发给李逵的红包,发现心有不甘,于是撤回。那么这个过程之中先是INSERT或者UPDATE,将宋押司的 50 块钱INSERT或者UPDATE给李逵,撤回则是将INSERT或者UPDATE转换成DELETE和UPDATE的过程。
上文中我们说了,数据库的事务具有持久性等四个特性,所以一旦事务提交,undo log 中保存的数据也就随即不再需要。但是,此时 undo log 中保存的数据并不是立即删除,而是像垃圾一样丢弃到数据库中的 undo 链表之中,而后由 MySQL 之中的 purge 线程统一清理删除,这个做法避免了其他事务回滚造成数据错误,同时也提高了数据库的性能。
3.总结
MySQL 数据库的事务主要是由redo log和undo log来实现的,这是我们理解 MySQL 事务原理的关键所在。
- redo log是在事务执行之前才产生的,并且在事务执行过程中,redo log也是不断产生,当产生的脏数据全部都写入磁盘之后,redo log随即也就完成了它的使命。
- undo log是在事务执行之前产生的,事务回滚时使用undo log日志中的数据覆盖新修改的数据,进而达到事务回滚的效果。需要注意的是,undo log回滚数据之后并不是立即删除的,而是由purge线程去探测可还有其他的事务正在使用该undo log日志,如果有,则保留,给予其他的事务来使用;如果没有,才会清除该undo log,释放空间。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们处理,核实后本网站将在24小时内删除侵权内容。

相关文章:
redo log 日志 与 undo log 日志工作原理
目录标题 1. redo log 日志2. undo log 日志3.总结 1. redo log 日志 redo log日志是 MySQL 数据中的重要日志之一,其本质是物理日志,存放于 数据库的数据目录中 ,名称为: ib_logfile 。它的功能主要是用于存放脏数据的日志&…...
go语言结构体与json数据相互转换
本博文简要介绍go语言结构体如何与json格式化字符串相互转换。 文章目录 go语言结构体转换为json数据json数据转换为go结构体 go语言结构体转换为json数据 type Person struct {Name string json:"name"Age int json:"age"Hobbies []strin…...
jenkins 自动化部署Springboot 项目
一、安装docker 1.更新yum命令 yum -y update2.查看机器有残留的docker服务,有就卸载干净 查看docker 服务 rpm -qa |grep docker卸载docker sudo yum remove docker-ce docker-ce-cli containerd.io sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/contai…...
使用xml发送国际短信(smspro)【吉尔吉斯斯坦】
//使用xml格式发送国外短信验证码【吉尔吉斯斯坦】官网:https://smspro.nikita.kg/ public function api_test($data,$user){$url "http://smspro.nikita.kg/api/message";$code 123456 ;$content Your verification code 123456, this verification …...
springmvc-springsecurity-redhat keycloak SAML2 xml实现
环境准备: jdk17 redhat keycloak 24 spring security 6 参照文档: 红帽KeyCloak:Red Hat build of Keycloak | Red Hat Product Documentation 入门指南:入门指南 | Red Hat Product Documentation 服务器管理指南&#x…...
【K8S系列】Kubernetes Pod节点CrashLoopBackOff 状态及解决方案详解【已解决】
在 Kubernetes 中,Pod 的状态为 CrashLoopBackOff 表示某个容器在启动后崩溃,Kubernetes 尝试重启该容器,但由于持续崩溃,重启的间隔时间逐渐增加。下面将详细介绍 CrashLoopBackOff 状态的原因、解决方案及相关命令的输出解释。 …...
Linux: Shell编程入门
Shell 编程入门 1 ) Shell 概念 shell 是 在英语中 壳, 外壳的意思可以把它想象成嵌入在linux这样的操作系统里面的一个微型的编程语言不像C语言, C 或 Java 等编程语言那么完整,它可以帮我们完成很多自动化任务例如保存数据监测系统的负载等等,我们同样…...
python爬虫实战案例——抓取B站视频,不同清晰度抓取,实现音视频合并,超详细!(内含完整代码)
文章目录 1、任务目标2、网页分析3、代码编写 1、任务目标 目标网站:B站视频(https://www.bilibili.com/video/BV1se41117WP/?vd_sourcee8e376ccbc5aa4cfd88e6a7917adfd1a),用于本文测验 要求:抓取该网址下的视频&…...
容灾与云计算概念
基础知识容灾备份——备份技术系统架构与备份网络方案-CSDN博客 SAN,是storage area network的简称,翻译过来就是存储区域网络。 顾名思义,SAN首先是一个网络,其次它是关于存储的,区域则是指服务器和存储资…...
基于 Python 的自然语言处理系列(44):Summarization(文本摘要)
在这一部分中,我们将探讨如何使用 Transformer 模型将长文档压缩为摘要,这个任务被称为文本摘要。文本摘要是 NLP 领域中最具挑战性的任务之一,因为它需要理解长篇文本并生成连贯的总结,捕捉文档中的核心主题。然而,当…...
RabbitMQ安装部署
安装Erlang 由于RabbitMQ是用Erlang语言编写的,所以在安装RabbitMQ之前需要安装Erlang 安装依赖 [rootpro-ex ~]yum install make gcc gcc-c build-essential openssl openssl-devel unixODBC unixODBC-devel kernel-devel m4 ncurses-devel设置Eralng的存储库 […...
智联招聘×Milvus:向量召回技术提升招聘匹配效率
01. 业务背景 在智联招聘平台,求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才,求职者则通过上传简历寻找合适的工作。在这种复杂的场景中,我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下,…...
unplugin-auto-import 库作用
unplugin-auto-import是一个 Vite、Webpack 和 Rollup 的插件。 一、自动导入模块 1. 减少手动导入 在 JavaScript 和 TypeScript 项目中,它可以自动检测并导入常用的模块和函数,无需手动在每个文件中进行导入操作。这大大减少了代码中的重复性导入语…...
【Multisim14.0正弦波>方波>三角波】2022-6-8
缘由有没有人会做啊Multisim14.0-其他-CSDN问答参考方波、三角波、正弦波信号产生 - 豆丁网...
vue3纯前端验证码示例
前言 验证码的用途:通过要求用户输入一串难以被机器自动识别的字符或图像,有效阻止恶意用户或脚本通过暴力破解方式尝试登录账户。验证码的分类:常见的验证码有短信、文本、图形等,安全度越高,依赖的插件或服务也越多…...
招聘程序员
全栈总监❤️golang❤️UI设计师 ☀️前端☀️Nodejs工☀️平面设计☀️PHP工 ☀️安卓❤️Flutter❤️运维☀️爬虫 公司福利: ☃️ 带薪年假、年终奖、13k-18k薪 🏩 内宿 2人/间或外宿可补助 💵 转正绩效 ✨节日礼金:生日礼金…...
Android 判断手机放置的方向
#1024程序员节|征文# 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 需求 老板:我有个手持终端,不能让他倒了,当他倒或者倾斜的时候要发出报警; 程序猿:我这..... 老板…...
Telegram机器人的手机部署
目的 一直有读 epub 电子书的习惯,摘录段落复制下来段落很难看,把自己写的排版器的逻辑复制下来,写成了一个排版机器人所有发给机器人的文字,都会经过排版,后转发到读书频道 前提 本来最好方法是直接把机器人架在服…...
ffmpeg视频滤镜: 色温- colortemperature
滤镜简述 colortemperature 官网链接 》 FFmpeg Filters Documentation 这个滤镜可以调节图片的色温,色温值越大显得越冷,可以参考一下下图: 咱们装修的时候可能会用到,比如选择灯还有地板的颜色的时候,选暖色调还是…...
Django+Vue全栈开发项目入门(二)
Vue是一款用于构建用户界面的JavaScript渐进式框架,它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、响应式的、组件化的编程模型,有助于高效地开发用户界面。 环境准备 安装Node.js:Vue项目的构建和运行依赖于Node…...
【MySQL】第五节 - 事务实战详解:从基础到并发控制(附 Navicat 可运行实验脚本)
《MySQL 事务实战详解:从基础到并发控制(附 Navicat 可运行实验脚本)》 为什么你必须掌握 MySQL 事务? 在现代应用系统中,数据一致性是核心诉求。事务(Transaction) 是保证数据完整性的“黄金…...
Hadoop 3.3.5 分布式集群部署
环境准备与规划硬件要求:3台节点(1主2从)软件依赖:JDK 8、SSH免密登录目录规范:统一安装路径(如/opt/module),用户权限管理Hadoop安装与核心配置一定要检查一下,ssh 能不…...
React项目实战:用XGPlayer打造带封面预览的沉浸式视频播放组件(附完整代码)
React项目实战:用XGPlayer打造带封面预览的沉浸式视频播放组件(附完整代码) 在当今内容为王的时代,视频已成为Web应用中不可或缺的元素。但如何让视频组件既美观又高效,同时提供流畅的用户体验?本文将带你深…...
payload-dumper-go实战案例:解决Android系统更新提取难题
payload-dumper-go实战案例:解决Android系统更新提取难题 【免费下载链接】payload-dumper-go an android OTA payload dumper written in Go 项目地址: https://gitcode.com/gh_mirrors/pa/payload-dumper-go Android系统更新通常以OTA(Over-the…...
【Echarts】Y轴标签优化:动态调整与智能截断的实战技巧
1. Y轴标签显示问题的根源分析 当使用Echarts绘制图表时,Y轴标签过长导致显示不全是个常见痛点。这个问题通常发生在两种场景:一是数据来自后端接口,标签长度不可控;二是图表容器宽度有限,无法容纳完整标签。 我遇到过…...
3D点云分割实战:如何用稀疏卷积SparseConvNet提升模型效率(附Facebook开源库指南)
3D点云分割实战:稀疏卷积SparseConvNet的高效实现与调优指南 在自动驾驶、机器人导航和增强现实等领域,3D点云数据的处理正成为计算机视觉的新前沿。与密集的2D图像不同,点云数据天生具有稀疏性——场景中大部分区域是空白,仅有少…...
为什么自动驾驶地铁离不开形式化方法?从法国B方法到上海15号线的实战解析
数学如何为自动驾驶地铁筑起安全屏障:从B方法到工业级验证的深度实践 当一列无人驾驶的地铁以80公里时速穿越隧道时,系统每毫秒需要处理200传感器信号、执行30余项控制决策。巴黎地铁14号线自1998年开通以来保持零重大事故记录,上海15号线全自…...
TransCAD新手必看:如何用表格链接快速创建矩阵OD并生成期望线(附详细步骤图)
TransCAD实战指南:从表格链接到期望线可视化的全流程解析 引言 在交通规划与空间分析领域,TransCAD作为一款专业的GIS软件,其强大的数据处理和可视化能力一直备受推崇。对于初学者而言,掌握表格链接创建矩阵OD并生成期望线的技巧&…...
终极指南:如何用Scream实现Windows音频网络共享
终极指南:如何用Scream实现Windows音频网络共享 【免费下载链接】scream Virtual network sound card for Microsoft Windows 项目地址: https://gitcode.com/gh_mirrors/sc/scream 想要将Windows电脑的音频无线传输到其他设备?厌倦了复杂的音频线…...
Python开发者实战:用pg-mcp轻松搞定PostgreSQL集群读写分离与连接池管理
Python开发者实战:用pg-mcp轻松搞定PostgreSQL集群读写分离与连接池管理 现代Web应用对数据库的要求越来越高,特别是在高并发场景下,传统的单一数据库连接方式往往成为性能瓶颈。作为Python开发者,我们经常需要在Flask或Django项目…...
