【MySQL 的三大日志的作用】
在管理MySQL数据库时,了解和区分数据库使用的三大日志类型至关重要。这些日志对于确保数据的完整性、提供恢复机制以及维持数据库的稳定性发挥着关键作用。最主要还是小豆前段时间去参加面试被问到了这些内容,下面将详细讨论Redo Log、Binlog和Undo Log的异同。
Redo Log(重做日志)
- 作用:Redo Log主要用于保证事务的持久性和数据库的崩溃恢复能力。当数据库发生崩溃时,InnoDB存储引擎可以使用Redo Log来恢复未提交事务的数据,确保数据的一致性。
- 内容:在事务处理中产生的所有数据页的物理修改,比如数据页的变动。它包括内存中的Redo Log Buffer和磁盘上的Redo Log File。
- 写入时机:在事务执行过程中,数据的更改首先被写入Redo Log Buffer,然后在事务提交时,这些更改会被写入到Redo Log File中。这个过程保证了MySQL可以在系统意外重启后,按照事务提交前的状态重新构建数据页,进而实现持久性。
Binlog(二进制日志)
- 作用:Binlog主要用于数据复制(主从复制)和数据恢复。它记录了所有修改了数据库状态的SQL语句,比如实际执行的SQL语句。使得可以在主从复制环境中同步数据,或者在数据丢失后进行恢复。
- 内容:Binlog记录了逻辑操作,如SQL语句。它以二进制的形式保存,并且可以是三种格式之一:Statement(记录SQL语句)、Row(记录行级更改)或Mixed(两者结合)。
- 写入时机:在事务提交时,Binlog会记录本次修改的数据。Binlog的写入通常在Redo Log之后,以确保数据的一致性。
Undo Log(回滚日志)
- 作用:Undo Log主要用于实现事务的原子性和隔离性。它记录了事务所做的更改,以便在事务失败或需要回滚时,可以恢复到事务开始之前的状态。
- 内容:Undo Log记录了数据被修改前的样子,以及事务的回滚信息。它允许数据库在读取旧版本的数据时,能够提供一致的视图。
- 写入时机:在数据被修改时,Undo Log会同时记录原始数据。在事务回滚或需要通过MVCC读取旧数据版本时,Undo Log会被使用。
日志之间的关系
Redo Log
和Undo Log
是InnoDB存储引擎紧密关联的组成部分,其中Redo负责记录事务的前景操作,Undo负责记录事务的后景操作。而Binlog
记录了执行修改的SQL语句,这三者协同工作保障了事务的ACID特性。Redo和Undo日志通常存在于存储引擎层面,而Binlog则是MySQL数据库级别的记录。
Redo Log
是InnoDB特有的,专门记录物理更改,用于保证数据的持久性和崩溃恢复。Binlog
是MySQL服务器层面的,记录逻辑更改,用于主从复制和数据恢复,记录逻辑操作。Undo Log
也是InnoDB特有的,记录数据改变前的状态,用于事务的回滚和多版本并发控制(MVCC)。
日志写入流程
以一次事务执行为例,使用流程图画一下日志写入流程:
在这个流程图中,我们描述了以下步骤:
- 用户通过执行
START TRANSACTION
、BEGIN
或者DML语句发起一个事务。 - 事务执行数据修改,同时记录到Undo Log(记录修改前的状态)和Redo Log Buffer(记录修改的内容)。
- 事务数据预写入内存中的Redo Log Buffer,为提交做好准备,但这是临时的。
- 事务完成所有操作。
- 事务提交时,Redo Log Buffer中的内容被写入到磁盘上的Redo Log File,确保数据的持久性。
- 同时,事务的更改被记录到Binlog Buffer,为复制和数据恢复做准备。
- 执行COMMIT命令,请求提交事务。
- 在提交时,事务确保Redo Log Buffer和Binlog Buffer中的更改都已同步到各自的磁盘文件。
- 事务将修改最终应用到磁盘文件,完成数据的持久化。
- 返回事务提交成功的确认给用户。
其他问题
1、会不会出现数据库磁盘中的文件已经被修改,但是没有记录到binlog日志中的情况?
通常情况下,这种情况是不会发生的。因为数据库在执行写操作的时候,会先将操作记录在Binlog中,然后再修改磁盘中的对应数据库文件。这就是所谓的write-ahead logging(WAL,预写式日志),即修改磁盘中的文件之前,必须先将相关的操作信息写入日志。
数据库维护了一个缓冲区,当有数据需要写入磁盘时,首先将这些数据写入缓冲区,然后再由缓冲区将这些数据批量写入磁盘,这样可以提高数据写入磁盘的效率。
而缓冲区在将数据写入磁盘之前,必须先将相关的操作信息写入日志。也就是说,任何修改磁盘中文件的操作,必须先写入日志。只有在日志成功写入后,缓冲区的数据才能写入硬盘。这种机制保证了在数据库系统崩溃的情况下,可以通过重放日志来恢复数据,确保数据的最终一致性和原子性。
至于你提到的这种情况,可能是由于些别的情况,比如操作系统崩溃,数据库软件的bug等等,导致数据已经写入了磁盘但是日志还没有来得及写入。但是这种情况在正常操作下是非常少见的,一般只会在极端的情况下才会发生。
2、事务提交前直接把数据写入磁盘就能保证持久性,为什么还要用redo log呢?
1、性能问题,直接写入磁盘(随机写)的性能通常比顺序写入要差。直接写入磁盘是随机写入。而Redo Log通常是顺序写入的,这可以提高写入效率。
2、原子性,如果在将数据写入磁盘的过程中发生系统崩溃(如电源故障、硬件故障等),那么可能只有部分数据被写入,导致数据不一致。Redo Log通过记录事务所做的修改,可以在故障后重做这些操作,确保事务的原子性。
3、并发问题,在高并发环境下,如果每个事务都直接写入磁盘,那么在多个事务同时修改同一条记录时,可能会出现冲突。Redo Log通过记录事务所做的修改,可以在事务提交时快速完成,而不需要对数据行进行长时间的锁定。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
【MySQL 的三大日志的作用】
在管理MySQL数据库时,了解和区分数据库使用的三大日志类型至关重要。这些日志对于确保数据的完整性、提供恢复机制以及维持数据库的稳定性发挥着关键作用。最主要还是小豆前段时间去参加面试被问到了这些内容,下面将详细讨论Redo Log、Binlog和Undo Log的…...
![](https://www.ngui.cc/images/no-images.jpg)
数据库中数据的id生成和算法
id生成策略 自增主键 一般使用整数类型的id可使用自增主键的策略去生成id 优点: 简单、易于使用和理解。保证唯一性,无需额外的查询操作。提高查询性能,因为ID是有序的,且支持索引。 缺点: 不适用于分布式系统&a…...
![](https://img-blog.csdnimg.cn/direct/475a35053fbb4b4e98d827c8d699c003.jpeg)
SystemVerilog Assertion精华知识
前言 断言主要用于验证设计的行为。断言也可用于提供功能覆盖率,并标记用于验证的输入激励不符合假定的需求。 在验证平台中,通常进行三个主要任务: 产生激励功能检查功能覆盖率度量 在当今的设计越来越复杂情况下,像波形调试…...
![](https://img-blog.csdnimg.cn/direct/68002af9baeb4edb9e138aefb88ecca2.png)
pdf怎么压缩到2m以内或5m以内的方法
PDF作为一种广泛使用的文档格式,已经成为我们工作和生活中不可或缺的一部分。然而,有时候PDF文件内存会比较大,给我们的存储和传输带来了很大的不便。因此,学会压缩 PDF 文件是非常必要的。 打开"轻云处理pdf官网"&…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fimg2.imgtp.com%2F2024%2F05%2F27%2FecnWy72K.jpg&pos_id=img-efHg69gN-1719050367990)
Butter Knife 8
// 部分代码省略… Override public View getView(int position, View view, ViewGroup parent) { ViewHolder holder; if (view ! null) { holder (ViewHolder) view.getTag(); } else { view inflater.inflate(R.layout.testlayout, parent, false); holder new ViewHolde…...
![](https://img-blog.csdnimg.cn/direct/145b71164f4546b89f5f21df5ef95986.png)
AMSR/ADEOS-II L1A Raw Observation Counts V003地球表面和大气微波辐射的详细观测数据
AMSR/ADEOS-II L1A Raw Observation Counts V003 简介 AMSR/ADEOS-II L1A Raw Observation Counts V003数据是由日本航空航天研究开发机构(JAXA)的AMSR (Advanced Microwave Scanning Radiometer)仪器收集的一组原始观测计数数据。这些数据是从ADEOS-I…...
![](https://img-blog.csdnimg.cn/direct/35e390749415432aa319580d44556b58.png)
MySQL之复制(十一)
复制 复制的问题和解决方案 数据损坏或丢失的错误 当一个二进制日志损坏时,能恢复多少数据取决于损坏的类型,有几种比较常见的类型: 1.数据改变,但事件仍是有效的SQL 不幸的是,MySQL甚至无法察觉这种损坏。因此最好还是经常检查…...
![](https://img-blog.csdnimg.cn/img_convert/fc74563092fc8198377fdd5aaa789509.png)
深入源码设计!Vue3.js核心API——Computed实现原理
如果您觉得这篇文章有帮助的话!给个点赞和评论支持下吧,感谢~ 作者:前端小王hs 阿里云社区博客专家/清华大学出版社签约作者/csdn百万访问前端博主/B站千粉前端up主 此篇文章是博主于2022年学习《Vue.js设计与实现》时的笔记整理而来 书籍&a…...
![](https://img-blog.csdnimg.cn/direct/52575a1eba634caeab76612fc7180d75.gif#pic_center)
驾考小技巧:老北京布鞋!距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”——早读(逆天打工人爬取热门微信文章解读)
我20年驾校4000多块钱,你呢? 引言Python 代码第一篇 洞见 距离高考出分还剩3天,我却看到有些孩子已经拿了“满分”第二篇 视频新闻结尾 引言 昨天的文章顺利发出 看来“梅西” 这两个字在我们这边 不是敏感词 只是很多个罗粉搞得有点过头了 …...
![](https://www.ngui.cc/images/no-images.jpg)
java-正则表达式 2
7. 复杂的正则表达式示例(续) 7.1 验证日期格式 以下正则表达式用于验证日期格式,例如YYYY-MM-DD。 import java.util.regex.*;public class RegexExample {public static void main(String[] args) {String[] dates {"2023-01-01&q…...
![](https://www.ngui.cc/images/no-images.jpg)
hadoop常见简单基础面试题
文章目录 hadoop简单基础面试题1. 请说下 HDFS 读写流程2. HDFS 在读取文件的时候,如果其中一个块突然损坏了怎么办3. HDFS 在上传文件的时候,如果其中一个 DataNode 突然挂掉了怎么办4. NameNode 在启动的时候会做哪些操作5.Secondary NameNode 了解吗&…...
![](https://www.ngui.cc/images/no-images.jpg)
泄漏检测(LDAR)在建档和检测过程中造假套路和不规范行为
第一章 建档环节造假和不规范 一、 企业行为: 企业为了节约检测费,采取部分建档,部分密封点检测的行为 二、 第三方检测公司不规范行为: 1、台账信息不准确,密封点命名不准确 &…...
![](https://img-blog.csdnimg.cn/direct/b6f1445972ea4eaaa79ae38eb876e2a8.png)
Android CTS环境搭建
CTS即Compatibility Test Suite意为兼容性测试,是Google推出的Android平台兼容性测试机制。其目的是尽早发现不兼容性,并确保软件在整个开发过程中保持兼容性。只有通过CTS认证的设备才能合法的安装并使用Google market等Google应用。 搭建CTS测试环境需…...
![](https://www.ngui.cc/images/no-images.jpg)
比较Zig、Rust和C++
比较Zig、Rust和C这三种编程语言,我们可以从以下几个关键维度来进行: 设计理念 表格 语言 设计理念 Zig 简洁性、模块化、避免常见错误 Rust 内存安全、并发性、性能 C 性能优化、资源控制、可扩展性 内存安全 Zig通过严格的编译时检查、可选…...
![](https://img-blog.csdnimg.cn/direct/72cc4d0c706e42d3817ed38dd376a03e.gif)
路由的params参数,命名路由,路由的params参数,命名路由
上篇我们讲了vue路由的使用 今天我们来讲vue中路由的嵌套,路由的params参数,命名路由 一.路由的params参数 1.配置路由规则,使用children配置项: router:[{path:/about,component:About,},{path:component:Home,//通过children配置子路由c…...
![](https://www.ngui.cc/images/no-images.jpg)
java:CompletableFuture的简单例子
java:CompletableFuture的简单例子 package com.chz.myTest;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.ExecutionException; import java.uti…...
![](https://www.ngui.cc/images/no-images.jpg)
element的table获取当前表格行
需求:验证表格同一行的最低限价不能超过销售定价 思路:先获取当前行table的index,然后在做大小比较 1.局部html <el-table-column label"销售定价(元)" min-width"200px"><template slot"header"&…...
![](https://img-blog.csdnimg.cn/direct/192a017d5f8e4c5e849410451e611e34.png)
html做一个分组散点图图的软件
在HTML中创建一个分组散点图,可以结合JavaScript库如D3.js或Plotly.js来实现。这些库提供了强大的数据可视化功能,易于集成和使用。下面是一个使用Plotly.js创建分组散点图的示例: 要添加文件上传功能,可以让用户上传包含数据的文…...
![](https://www.ngui.cc/images/no-images.jpg)
【SQL】UNION 与 UNION ALL 的区别
在 SQL 中,UNION 和 UNION ALL 都用于将两个或多个结果集合并为一个结果集,但它们在处理重复数据方面有显著区别。以下是它们的详细区别: 1. UNION UNION 操作符用于合并两个或多个 SELECT 语句的结果集,并自动去除结果集中重复…...
![](https://img-blog.csdnimg.cn/direct/0acc095fcdfe4aa59ee4596c98adbbee.png)
分类判决界面---W-H、H-K算法
本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习笔记&#…...
![](https://img-blog.csdnimg.cn/direct/d8225167d69c4e028830580b73447340.jpeg)
Python基础教程(三十):math模块
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝Ὁ…...
![](https://img-blog.csdnimg.cn/img_convert/4d3fa1a94f7490439e438e8792c491e8.jpeg)
你只是重新发现了一些东西
指北君关于另外一条思维路径的发现。 "自以为是"的顿悟时刻 有很多时候,我会"自以为是"的发现/发明一些东西。这种"自以为是"的时刻通常还带有一些骄傲自豪的情绪。这种感觉特别像古希腊博学家阿基米德 在苦思冥想如何测量不规则物体…...
![](https://img-blog.csdnimg.cn/direct/5b11be156f4e49fda84e9fe4ec19f05d.png)
【英伟达GPU的挑战者】Groq—AI大模型推理的革命者
目录 引言第一部分:Groq简介第二部分:Groq的特点与优势1、高性能推理加速2、近存计算技术3、专用ASIC芯片设计4、低延迟与高吞吐量5、成本效益分析6、易用性与集成性7、软件与硬件的协同设计 第三部分:Groq的使用指南1、准备工作2、简单使用样…...
![](https://img-blog.csdnimg.cn/direct/42043c7098b64c63bf1d7a82ae2cb911.png)
Python学习路线
Python学习路线 领取资料 一、Python基础知识 Python入门:了解Python的安装方法、如何运行Python程序以及交互模式的使用,同时学习注释的添加方法。 数据类型:掌握Python中的各种数据类型,包括数字、布尔值、字符串、列表、元…...
![](https://www.ngui.cc/images/no-images.jpg)
C++ std::forward()
在线调试网站: https://wandbox.org/ #include <iostream> #include <thread> #include <mutex> void func(int &&args) {std::cout << args << std::endl; }int main () {int a 10;func(20); …...
![](https://img-blog.csdnimg.cn/direct/28edbba515494195b2405823ebde7468.png)
常见的8种排序(含代码):插入排序、冒泡排序、希尔排序、快速排序、简单选择排序、归并排序、堆排序、基数排序
时间复杂度O(n^2) 1、插入排序 (Insertion Sort) 从第一个元素开始,该元素可以认为已经被排序;取出下一个元素,在已经排序的元素序列中从后向前扫描;如果该元素(已排序)大于新元素,将该元素移到…...
![](https://img-blog.csdnimg.cn/direct/6bc4a880fa714b7b81c425bf16f1afb4.png)
go语言day2
使用cmd 中的 go install ; go build 命令出现 go cannot find main module 错误怎么解决? go学习-问题记录(开发环境)go: cannot find main module; see ‘go help modules‘_go: no flags specified (see go help mod edit)-CSDN博客 在本…...
![](https://img-blog.csdnimg.cn/direct/a98c1c234384468c9fe674f628ebac52.png)
vue echarts画多柱状图+多折线图
<!--多柱状图折线图--> <div class"echarts-box" id"multiBarPlusLine"></div>import * as echarts from echarts;mounted() {this.getMultiBarPlusLine() },getMultiBarPlusLine() {const container document.getElementById(multiBar…...
![](https://img-blog.csdnimg.cn/direct/0262b350c194473bb416eacf70aa39ac.png)
cesium for unity 打包webgl失败,提示不支持
platform webgl is not supported with HDRP use the Vulkan graphics AR instead....
![](https://www.ngui.cc/images/no-images.jpg)
python开发基础——day7 序列类型方法
一、初识序列类型方法 序列类型的概念:数据的集合,在序列类型里面可以存放任意的数据,也可以对数据进行更方便的操作,这个操作是叫增删改查(crud) ( 增加(Creat),读取查询(Retrieve),更新(Update)…...
![](https://images2017.cnblogs.com/blog/234895/201710/234895-20171014205232652-1470098463.png)
静态网页设计公司报价/保定百度首页优化
前言 开篇名义,这篇博客介绍一下Android下使用绑定服务进行时数据交互的几种方法。关于Android下Service的内容,前面两篇博客已经介绍了,不清楚的可以移步过去先看看:Android--Service之基础、Android--Service之提高。 在前面的博…...
![](/images/no-images.jpg)
wordpress页面都在右边/网络营销有哪些功能
Unity 基础 之 目录结构解析一,Unity的资源数据加载Resources的序列化Resource、StreamingAsset文件夹安装后的路径(Android,iOS)二,Unity的Android和IOS上相关的目录结构三,常用目录对应的Android…...
![](https://img-blog.csdnimg.cn/20190411105028786.png)
网站建设专业培训/合肥seo网站管理
Ubuntu的运行模式 Ubuntu从大的方面来说,分为图形化界面和命令行模式,图形化界面是系统默认的模式,但是容易崩溃,在进入不了图形化界面的时候,就需要进入命令行模式来进行操作,接下来介绍一下怎么进入命令…...
![](https://img-blog.csdnimg.cn/img_convert/7ce489cad0b9c1f780d9054a8e478c76.png)
如何设置wordpress的文章分类/黄页88网站推广方案
【Web技术】HTML详解head标签 一个网页由head和body标签组成 body用来呈现网页内容,而head标签中除了title标签还有什么作用与属性呢? <html><head><title>文档的标题</title></head><body>文档的内容... ...<…...
![](https://ws1.sinaimg.cn/large/005EneYkgy1fq8vbms62jj30jf052mxe.jpg)
vue 做自适应网站/新闻热点大事件
1、背景 对于传统的单点登录系统,使用cookie和session的方式存储用户登录信息,但是对于安全性要求较高的企业–金融企业,就需要对用户的信息进行加密存储,防止客户信息泄露。 2、JWT构成 JWT—-JSON Web Token 第一部分我们称它…...
![](/images/no-images.jpg)
用网站做的简历/信息检索关键词提取方法
概念专业术语 Producer 消息生产者,负责产生消息,一般由业务系统负责产生消息。 Consumer 消息消费者,负责消费消息,一般是后台系统负责异步消费。 Push Consumer Consumer 的一种,应用通常向 Consumer 对象注册…...