MySQL 三大日志详解
在 MySQL 数据库中,binlog(二进制日志)、redo log(重做日志)和 undo log(回滚日志)起着至关重要的作用。它们共同保障了数据库的高可用性、数据一致性和事务的可靠性。下面将对这三大日志进行详细的介绍。
一、binlog(二进制日志)
1. 定义与作用
Binlog 是 MySQL 数据库的二进制日志,它记录了数据库的所有变更操作,包括数据的插入、更新、删除等。主要作用有以下两点:
- 主从复制:在主从复制架构中,主库将数据库的变更操作记录在 binlog 中,然后从库通过读取主库的 binlog 来实现数据同步。这样可以实现数据库的扩展和高可用性。
- 数据恢复:如果数据库出现故障,可以通过备份的数据库文件和 binlog 来恢复到故障发生前的状态。
2. 特点
- 逻辑日志:binlog 记录的是数据库的逻辑操作,例如 SQL 语句。这意味着它可以跨不同的数据库版本使用,因为它记录的是逻辑操作而不是物理操作。
- 可配置性:可以通过配置参数来决定哪些数据库、哪些表的操作被记录在 binlog 中。还可以配置 binlog 的格式,如 STATEMENT(记录 SQL 语句)、ROW(记录行级变更)和 MIXED(混合模式)。
- 可被多个从库读取:主库生成的 binlog 可以被多个从库同时读取,实现主从复制的扩展。
3. 工作原理
- 当数据库执行一个事务时,如果事务涉及到对数据的修改操作,MySQL 会将该事务的 SQL 语句记录到 binlog 中。
- 主库将 binlog 发送给从库,从库通过读取 binlog 并执行其中的 SQL 语句来实现数据同步。
二、redo log(重做日志)
1. 定义与作用
Redo log 是 MySQL 数据库的重做日志,它记录了对数据页的物理修改操作。主要作用是保证事务的持久性,即当数据库发生故障时,通过 redo log 可以恢复未写入磁盘的数据。
2. 特点
- 物理日志:redo log 记录的是对数据页的物理修改操作,例如某个数据页的某个偏移量处的值被修改为某个特定的值。
- 循环写入:redo log 是循环写入的,当空间写满后,会从头开始覆盖旧的日志。为了防止覆盖未写入磁盘的数据,MySQL 会在覆盖旧日志之前将其写入磁盘。
- 先写日志后写磁盘:在事务提交时,MySQL 会先将 redo log 写入磁盘,然后再将数据页写入磁盘。这样可以保证在数据库发生故障时,能够通过 redo log 恢复未写入磁盘的数据。
3. 工作原理
- 当事务对数据进行修改时,MySQL 首先将修改操作记录在 redo log 中,并将数据页的修改标记为 “脏页”。
- 后台有一个线程会定期将 “脏页” 写入磁盘。如果在写入磁盘之前数据库发生故障,那么在数据库重新启动时,可以通过 redo log 来恢复 “脏页” 中的数据。
三、undo log(回滚日志)
1. 定义与作用
Undo log 是 MySQL 数据库的回滚日志,它记录了事务对数据的反向操作,用于撤销事务的修改。主要作用有以下两点:
- 事务回滚:如果事务执行过程中出现错误,可以通过 undo log 来撤销事务对数据的修改,实现事务的回滚。
- MVCC(多版本并发控制):为了实现 MVCC,MySQL 需要保存数据的多个版本。undo log 中记录了数据的旧版本,通过它可以实现数据的多版本并发控制。
2. 特点
- 逻辑日志:undo log 记录的是事务对数据的反向操作,是逻辑日志。
- 与事务相关:每个事务都有自己的 undo log,用于回滚该事务对数据的修改。
- 可用于 MVCC:undo log 中的旧版本数据可以用于实现 MVCC,提高数据库的并发性能。
3. 工作原理
- 当事务对数据进行修改时,MySQL 会同时在 undo log 中记录反向操作。
- 如果事务需要回滚,MySQL 可以通过 undo log 中的反向操作来撤销事务对数据的修改。
- 在 MVCC 中,当一个事务读取数据时,MySQL 会根据事务的隔离级别和当前数据的版本,从 undo log 中找到合适的版本返回给事务。
四、三大日志的关系
Binlog、redo log 和 undo log 在 MySQL 数据库中相互配合,共同保障了数据库的高可用性和数据一致性。它们之间的关系如下:
- binlog 与 redo log 的关系:binlog 是逻辑日志,记录的是数据库的逻辑操作;redo log 是物理日志,记录的是对数据页的物理修改操作。在主从复制中,主库将 binlog 发送给从库,从库通过执行 binlog 中的 SQL 语句来实现数据同步。而在事务提交时,MySQL 会先将 redo log 写入磁盘,然后再将 binlog 写入磁盘,这样可以保证在数据库发生故障时,能够通过 redo log 恢复未写入磁盘的数据,同时也可以通过 binlog 进行数据恢复和主从复制。
- redo log 与 undo log 的关系:redo log 用于保证事务的持久性,undo log 用于事务回滚和 MVCC。当事务对数据进行修改时,MySQL 会同时将修改操作记录在 redo log 和 undo log 中。如果事务需要回滚,MySQL 可以通过 undo log 中的反向操作来撤销事务对数据的修改;如果数据库发生故障,MySQL 可以通过 redo log 来恢复未写入磁盘的数据。
- binlog、redo log 和 undo log 的整体关系:这三种日志在 MySQL 数据库中共同作用,保证了数据库的高可用性、数据一致性和事务的可靠性。binlog 用于主从复制和数据恢复,redo log 用于保证事务的持久性,undo log 用于事务回滚和 MVCC。它们相互配合,使得 MySQL 数据库能够在各种情况下保持数据的完整性和一致性。
相关文章:
MySQL 三大日志详解
在 MySQL 数据库中,binlog(二进制日志)、redo log(重做日志)和 undo log(回滚日志)起着至关重要的作用。它们共同保障了数据库的高可用性、数据一致性和事务的可靠性。下面将对这三大日志进行详…...
Java 岗面试八股文及答案整理(2024最新版)
春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,小刀在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸能…...
Web3.0安全开发实践:Clarity最佳实践总结
在过去的一段时间里,CertiK团队对比特币生态系统及其发展进行了深入研究。同时,团队还审计了多个比特币项目以及基于不同编程语言的智能合约,包括OKX的BRC-20钱包和MVC DAO的sCrypt智能合约实现。 现在,我们的研究重点转向了Clar…...
基于Springboot+Vue动漫推荐平台管理系统(源码+lw+讲解部署+PPT)
前言 详细视频演示 论文参考 系统介绍 系统概述 核心功能 用户角色与功能 具体实现截图 1. 热门动漫功能 2. 文章专栏功能 3. 会员分享功能 4. 热门动漫管理功能(管理员端) 5. 动漫分类管理功能 技术栈 后端框架SpringBoot 前端框架Vue …...
秋意浓,森林披金装
秋意浓,森林披金装, 枫叶如火,漫山遍野狂。 松间轻风送寒意, 鸟鸣悠扬入云翔。 林间小径蜿蜒行, 落叶铺成金色毯。 溪水潺潺绕石转, 映出天边一抹霞。 野菊点缀在草间, 白云悠悠随意闲。…...
Chrome离线安装包下载
1、问Chrome的官网:https://www.google.cn/chrome/ 直接下载的是在线安装包,安装需要联网。 2、如果需要在无法联网的设备上安装Chrome,需要在上面的地址后面加上?standalone1。 Chrome离线安装包下载地址:https://www.google.c…...
安卓手机5G网络频繁掉4G 问题解决 手机5G网络优化方案
问题环境 在某个长期停留的位置(例如:躺平)使用手机时网络突然从5G跳到4G,偶尔跳来跳去导致网络体验很差,经过调整5G网络情况下网速及其他体验都要更好,基于这样的情况使用一种简单的操作,锁定5…...
使用LLaMA-Factory微调时的问题与解决方案记录
文章目录 如何指定微调使用的显卡如何解决显卡通信导致的报错模型微调的实际epoch和step如何计算如何实现多卡全量微调模型微调后的结果如何查看模型测试后的指标如何理解如何指定微调使用的显卡 启动网页时使用这种执行命令 CUDA_VISIBLE_DEVICES=5,6,7 llamafactory-cli we…...
Go语言switch语句
在Go语言中,switch,是一个高度灵活,其功能强大的控制结构,相比较Java中的switch,更受到语言重视。 目录 1.基础用法2.多值匹配3.不指定表达式的 switch4.使用 fallthrough 强制进入下一个分支5.使用类型断言的 switch…...
JavaScript DOM使用
DOM Document Object Model 简单而言,就是JavaScript将HTML文档的各个组成部分封装为对象。 封装的对象分别为: Document:整个HTML的文档对象 Element:元素对象(也就是HTML中的标签) Attribute:…...
人工智能|计算机视觉——微表情识别(Micro expression recognition)的研究现状
一、简述 微表情是一种特殊的面部表情,与普通的表情相比,微表情主要有以下特点: 持续时间短,通常只有1/25s~1/3s;动作强度低,难以察觉;在无意识状态下产生,通常难以掩饰或伪装;对微表情的分析通常需要在视频中,而普通表情在图像中就可以分析。由于微表情在无意识状态…...
耿恭坚守城池的方法
疏勒城之战中,耿恭坚守城池的方法主要有以下几点: 选择有利地势:耿恭深知疏勒城依山傍水、地势险要,易守难攻,于是果断放弃金满城,移师至疏勒城据守,为长期坚守创造了良好的地理条件.运用心理战…...
小兔鲜项目总结——项目亮点
目录 1、基于业务的逻辑组件拆分思想2、长页面吸顶交互的实现3、自定义图片懒加载指令并封装为插件4、画板插槽组件等业务通用组件封装5、通用逻辑函数的封装6、列表无限加载7、路由缓存问题的处理 小兔鲜项目其实在暑假之前就已经做完了,但是一直没有空做总结&…...
Cesium的ClearCommand的流程
ClearCommand是在每帧渲染前可以将显存的一些状态置为初始值,就如同把擦黑板。当然也包括在绘制过程中擦掉部分的数据,就如同画家在开始绘制的时候会画导览线(如透视线),轮廓出来后这些导览线就会被擦除。 我画了一个…...
Fakelocation Server服务器/专业版 ubuntu
前言:需要Ubuntu系统 Fakelocation开源文件系统需求 Ubuntu | Fakelocation | 任务一 任务一 更新Ubuntu(安装下载不再赘述) sudo -i # 提权 sudo apt update # 更新软件包列表 sudo apt upgrade # 升级已安装的软…...
Spring AI Alibaba 快速入门
Spring AI Alibaba 实现了与阿里云通义模型的完整适配,接下来,我们将学习如何使用 spring ai alibaba 开发一个基于通义模型服务的智能聊天应用。 一、快速体验示例 注意:因为 Spring AI Alibaba 基于 Spring Boot 3.x 开发,因此…...
Docker Registry(镜像仓库)详解
Docker Registry(镜像仓库)详解 Docker Registry,即Docker镜像仓库,是Docker生态系统中一个至关重要的组件。它负责存储、管理和分发Docker镜像,为Docker容器提供镜像资源。本文将深入探讨Docker Registry的功能、结构…...
RTOS学习笔记---“二值信号量”和“互斥信号量”
在实时操作系统(RTOS)中,“二值信号量”和“互斥信号量”是两种常见的同步机制,用于线程之间的协调与资源管理。尽管它们有相似之处,都基于信号量概念,但它们的用途和行为存在重要区别。 1. 二值信号量&…...
Oracle-物化视图基本操作
-- 物化视图 -- 与普通视图的区别:真实存在数据的 普通视图的数据在基表 物化视图看成是, 一个定时运行的计算JOB一个存计算结果的表 创建时生成数据: 分为两种:build immediate 和 build deferred, build immediate是在创…...
(功能测试)测试报告
其中的统计分析和测试结果确认是必须要有的; 测试过程回顾:测试的时间和阶段,是否出现延期,与预期的任务计划是否匹配; !统计分析:统计写多少用例,用例覆盖情况如何(100%…...
2025届必备的六大AI学术工具解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 有一种人工智能开题报告辅助工具,它借助先进的自然语言处理技术与知识图谱技术构…...
Photon光影包:颠覆级Minecraft视觉体验的沉浸式渲染方案
Photon光影包:颠覆级Minecraft视觉体验的沉浸式渲染方案 【免费下载链接】photon A gameplay-focused shader pack for Minecraft 项目地址: https://gitcode.com/gh_mirrors/photon3/photon 在像素化的方块世界中,如何突破视觉边界实现电影级画面…...
QGIS中高效集成天地图:从注册到加载的完整指南
1. 天地图与QGIS的完美结合 第一次接触天地图是在一个城市规划项目里,当时需要高精度的底图作为参考。天地图作为国内权威的地理信息服务,不仅数据更新及时,而且完全免费,这对我们这些搞GIS开发的人来说简直是福音。不过刚开始用的…...
PyTorch 2.8多场景实操:科研训练+工程推理+内容创作的统一技术底座
PyTorch 2.8多场景实操:科研训练工程推理内容创作的统一技术底座 1. 为什么选择PyTorch 2.8作为统一技术底座 PyTorch 2.8作为当前最主流的深度学习框架之一,已经成为学术界和工业界的首选工具。这个基于RTX 4090D 24GB显卡深度优化的镜像,…...
GitHub界面中文化:如何让全球最大的代码托管平台说中文?
GitHub界面中文化:如何让全球最大的代码托管平台说中文? 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 当我们…...
Phi-4-mini-reasoning推理质量评估:GSM8K/MATH数据集本地测试方法
Phi-4-mini-reasoning推理质量评估:GSM8K/MATH数据集本地测试方法 1. 模型简介 Phi-4-mini-reasoning是一个轻量级开源模型,专注于高质量数学推理任务。作为Phi-4模型家族的一员,它通过合成数据训练和微调,特别擅长解决需要密集…...
别再搞混了!海康相机Bayer、Mono、YUV格式详解与选型避坑指南
工业相机图像格式全解析:从Bayer到YUV的实战选型策略 第一次接触工业相机参数表时,看到BayerRG8、Mono12 Packed、YUV422这些术语是不是感觉像在读天书?去年我在自动化检测项目上就曾因为选错图像格式,导致整套视觉算法推倒重来。…...
ChatGPT_JCM路由管理策略:SPA应用的导航设计与实现
ChatGPT_JCM路由管理策略:SPA应用的导航设计与实现 【免费下载链接】ChatGPT_JCM 项目地址: https://gitcode.com/gh_mirrors/ch/ChatGPT_JCM ChatGPT_JCM是一个基于Vue2开发的OpenAI Web管理界面,提供完整的路由管理策略和单页面应用导航设计。…...
保姆级教程:用ArduPilot给无人车/船配置避障(附MR72雷达、TFmini Plus参数)
保姆级教程:用ArduPilot为无人车/船配置毫米波与激光雷达避障系统 当你的无人车在野外自动巡航时突然检测到前方障碍物,是紧急刹车还是智能绕行?水面无人船在夜间航行如何避开漂浮物?本文将手把手带你完成从硬件选型到参数调优的全…...
Python自动化测试框架入门教程
Python自动化测试框架入门教程:从零开始掌握Pytest和unittest 📝 摘要 自动化测试是现代软件开发不可或缺的一部分,能够显著提高代码质量和开发效率。本文将带你从零开始了解Python主流自动化测试框架——Pytest和unittest,包含…...
