MySQL三大日志

embedded/2025/1/16 15:22:42/

在 MySQL 数据库的运行过程中,有三大关键日志起着至关重要的作用,它们分别是 binlog、redo log 和 undo log。理解这三大日志,对于深入掌握 MySQL 的工作原理、数据恢复以及主从复制等操作有着极大的帮助,今天就来详细剖析一下它们。​
一、binlog(二进制日志)​
binlog 是 MySQL Server 层的二进制日志,它记录了对 MySQL 数据库执行更改的所有操作语句,以二进制的形式存储。其主要用途包括:​

数据恢复:在数据库出现故障或数据丢失时,可以通过重放 binlog 中的操作来恢复到某个时间点的数据状态。例如,误删除了一张重要的数据表,只要 binlog 保存完好,就能依据它找回数据。​

主从复制:这是 binlog 最为重要的应用场景之一。主库上的 binlog 会被发送到从库,从库通过读取并执行 binlog 中的操作,实现与主库的数据同步,确保数据的一致性,满足高可用架构的需求。​
binlog 的记录格式有多种,常见的有 STATEMENT、ROW 和 MIXED。STATEMENT 格式记录的是执行的 SQL 语句文本,ROW 格式记录的是每一行数据被修改的情况,MIXED 则是混合使用前两者,根据具体操作智能选择合适的记录方式。​
二、redo log(重做日志)​
redo log 属于 InnoDB 存储引擎特有的日志,它记录的是对数据页的物理修改操作。当有事务对数据进行修改时,InnoDB 引擎先将修改操作记录到 redo log 中,然后再更新内存中的数据页,而不是直接将修改持久化到磁盘上的数据文件。这样做的好处在于:​

提升性能:因为写 redo log 是顺序写入磁盘的,相比随机写入数据文件,速度要快得多。即使数据库发生崩溃,在重启后,InnoDB 引擎可以根据 redo log 中的记录,将未落盘的修改重新应用到数据文件上,确保数据的完整性,这种特性也被称为 crash-safe。​

保障事务持久性:事务提交时,只要 redo log 记录成功写入磁盘,即使此时数据文件还未同步更新,也能保证事务的持久性,即数据不会因系统故障而丢失。​
redo log 由多个日志文件组成,以循环写入的方式工作,有多个日志组可以提升写入的并发能力,保证 redo log 的持续写入不中断。​
三、undo log(回滚日志)​
undo log 同样是 InnoDB 存储引擎的重要组成部分,它主要用于事务的回滚操作。当一个事务开始后,InnoDB 引擎会为该事务生成对应的 undo log,记录事务修改数据之前的旧值。如果事务执行过程中需要回滚,例如遇到错误或者被显式 rollback,InnoDB 引擎就会利用 undo log 中的信息,将数据恢复到事务开始前的状态。​
undo log 还有一个重要作用是实现 MVCC(多版本并发控制)。在 MVCC 机制下,不同事务对同一数据行的读操作可以看到不同版本的数据,undo log 保存了这些旧版本的数据,使得读操作不会被写操作阻塞,大大提高了数据库的并发性能。​
四、三大日志的协同工作​
在一次事务操作中,这三大日志相互配合。首先,事务开始,InnoDB 引擎生成 undo log,记录数据修改前的状态。接着,事务执行过程中,对数据的修改操作先记录到 redo log,同时更新内存中的数据页。当事务提交时,redo log 持久化到磁盘,确保事务的持久性。如果后续需要进行数据恢复,binlog 提供了基于时间点或位置的恢复手段,结合 redo log 的 crash-safe 特性,保障数据尽可能完整地找回;而 undo log 随时准备应对事务回滚的需求。​
总之,MySQL 的 binlog、redo log 和 undo log 各司其职又紧密协作,它们是保障 MySQL 数据库稳定、可靠、高性能运行的基石,深入理解它们对于数据库的运维、优化以及开发都有着不可忽视的意义。希望通过这篇文章,大家对 MySQL 三大日志有了较为清晰的认识。


http://www.ppmy.cn/embedded/154417.html

相关文章

[笔记] VS Code 完全指南:快捷键速查手册 与 Vue 开发插件推荐

文章目录 一. Vue 开发插件推荐二. 快捷键速查手册1. 基础操作2. 基础编辑 Basic editing3. 导航 Navigation4. 搜索和替换 Search and replace5. 多光标和选择 Multi-cursor and selection6. 丰富的语言编辑 Rich languages editing7. 编辑器管理 Editor management8. 文件管理…

Spring boot面试题---- Spring boot项目运行原理

1.启动流程概述 Spring Boot 的启动是从一个带有main方法的主类开始的。这个主类通常会有一个@SpringBootApplication注解。这个注解是一个组合注解,它包含了@Configuration、@EnableAutoConfiguration和@ComponentScan。@Configuration注解表明这个类是一个配置类,它可以定义…

Java IDEA中Gutter Icons图标的含义

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 很多人刚开始用IDEA来学习编程,会发现下面这些图标。 但是…

FPGA EDA软件的位流验证

位流验证,对于芯片研发是一个非常重要的测试手段,对于纯软件开发人员,最难理解的就是位流验证。在FPGA芯片研发中,位流验证是在做什么,在哪些阶段需要做位流验证,如何做?都是问题。 我们先整体的…

数学:机器学习的理论基石

一、数学:机器学习的理论基石 机器学习是一种通过数据学习模式和规律的科学。其核心目标是从数据中提取有用的信息,以便对未知数据进行预测和分类。为了实现这一目标,机器学习需要一种数学框架来描述和解决问题。数学在机器学习中起着至关重…

Shader -> BitmapShader贴图着色器详解

XML文件 <?xml version"1.0" encoding"utf-8"?> <com.example.myapplication.MyViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pa…

校园跑腿小程序---轮播图,导航栏开发

hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生…

day09_kafka高级

文章目录 kafka高级今日课程内容核心概念整理Kafka的数据位移offset**为什么 Kafka 的 offset 就像是“书签”&#xff1f;****实际意义** Kafka的基准/压力测试测试生产的效率测试消费的效率 Kafka的分片与副本机制kafka如何保证数据不丢失生产者端Broker端消费者端相关参数 K…