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…...
从零到一:UniApp前端网页托管与自定义域名配置实战指南
1. 从零开始:UniApp前端网页托管全流程解析 第一次接触UniApp前端网页托管时,我也被各种专业术语搞得晕头转向。经过几个项目的实战,我发现这套流程其实就像租房子:你得先有个门牌号(域名),再找…...
如何通过Qwen Code多语言功能提升开发效率
如何通过Qwen Code多语言功能提升开发效率 【免费下载链接】qwen-code Qwen Code is a coding agent that lives in the digital world. 项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code Qwen Code作为一款智能编程助手,其强大的多语言支持功能…...
基于AI的老照片修复技术实战指南:从算法原理到完整部署
基于AI的老照片修复技术实战指南:从算法原理到完整部署 【免费下载链接】Bringing-Old-Photos-Back-to-Life Bringing Old Photo Back to Life (CVPR 2020 oral) 项目地址: https://gitcode.com/gh_mirrors/br/Bringing-Old-Photos-Back-to-Life Bringing-Ol…...
WarcraftHelper:魔兽争霸3现代系统兼容性优化终极指南 [特殊字符]
WarcraftHelper:魔兽争霸3现代系统兼容性优化终极指南 🎮 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现…...
VibeVoice与Vue3前端整合:浏览器端语音合成方案
VibeVoice与Vue3前端整合:浏览器端语音合成方案 1. 为什么要在浏览器里直接合成语音 你有没有遇到过这样的场景:在做一个在线教育应用时,想让系统自动朗读课文,但每次都要把文字发到后端服务器,等几秒钟再把音频文件…...
Mac Mouse Fix革命性指南:让普通鼠标在Mac上实现专业级操作体验
Mac Mouse Fix革命性指南:让普通鼠标在Mac上实现专业级操作体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款专为Mac用户…...
还在为跨平台模组烦恼?这款工具让你一键获取Steam创意内容
还在为跨平台模组烦恼?这款工具让你一键获取Steam创意内容 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否也曾遇到这样的困境:在Epic Games Stor…...
Sentinel-2 Level-2A数据怎么用?从QA60波段解读到实战:去云、计算NDVI/ARVI并导出GeoTIFF
Sentinel-2 Level-2A数据实战指南:从QA60波段解析到植被指数计算全流程 当第一次打开Sentinel-2 Level-2A数据时,很多研究者会被那些看似晦涩的质量波段搞得一头雾水。记得我刚开始处理这些数据时,就曾因为忽略了QA60波段的重要性,…...
新手友好:Python3.9镜像环境配置,Jupyter和SSH两种方式任你选
新手友好:Python3.9镜像环境配置,Jupyter和SSH两种方式任你选 1. Python3.9镜像简介 Python3.9是Python语言的一个重要版本,它继承了Python一贯的简洁易读特性,同时带来了多项性能改进和新功能。这个Miniconda-Python3.9镜像为你…...
Python实战:从零掌握标准正态分布及其可视化
1. 什么是标准正态分布? 我第一次接触标准正态分布是在大学统计课上,当时教授画了一个完美的钟形曲线,说这是自然界最常见的分布。后来做数据分析才发现,这个看似简单的曲线真的无处不在——从人的身高体重到考试分数,…...
