MySQL的三种重要的日志

日志

Mysql有三大日志系统

  • Undo Log(回滚日志):记录修改前的数据,用于事务回滚和 MVCC(多版本并发控制)。

  • Redo Log(重做日志):记录数据变更,用于崩溃恢复,确保持久性。

  • Binlog(备份日志):记录事务操作日志,用于主从复制和灾难恢复。

Redo Log

Redo Log 记录的是物理日志,也就是磁盘数据页的修改(Redo Log 记录了哪些数据被修改,以及修改前后的数据内容。包括被修改的数据页或块的位置信息)

作用:用来保证服务崩溃后,仍能把事务中变更的数据持久化到磁盘上

背景:当数据库对数据做修改时,需要把数据页从磁盘读到buffer pool中,然后在buffer pool中进行修改,那么这个时候buffer pool中的数据页就与磁盘上的数据页内容不一致,称buffer pool的数据页为脏数据,如果这个时候发生非正常的DB服务重启,那么这些数据还在内存,并没有同步到磁盘上,也就是发生数据丢失,那么这个时候使用redo log,在buffer pool的数据页变更结束后,就可以相应修改记录到这个文件,那么当DB服务发生崩溃宕机时,进行恢复DB时,可以根据文件的记录内容,重新持久化刷新到磁盘数据(redo log ,用于记录数据修改后的记录,顺序记录,主要用于数据的持久化操作。)、

 

组成

  • redo log buffer日志缓存

重做日志缓存存在于内存中,容易发生丢失,先缓存数据,再一次性存入磁盘。

  • redo log file日志文件

存在于磁盘中,不容易发生丢失

redo log buffer是在内存中的,写入buffer后,并不会立即持久化到Redo log file,需要等待操作系统调用fsync操作(具体什么时候使用innodb_flush_log_at_trx_commit 参数配置)

参数值含义
0(延迟写)提交事务后,不会立即刷到OS Buffer中,而是等一秒后刷新到OS Buffer并调用fsync()写入Redo Log FIle,可能会丢失一秒钟的数据。
1(实时写每次提交事务,都会刷新到OS Buffer并调用fsync()写到Redo Log FIle,性能较差
2(延迟刷新)每次提交事务只刷新到OS Buffer,一秒后再调用fsync()写入Redo Log FIle

 

 

Undo Log

Undo Log回滚日志记录的是逻辑日志,也就是sql语句(比如当我们执行一条insert语句,Undo Log记录一条相反的delete语句--但它并不是简单地存储原始的SQL语句,而是存储相应的逆操作及相关的数据状态。这种设计使得回滚操作更直接和高效。)

作用

  • 回滚事务:当事务需要回滚时,数据库系统使用Undo Log来撤销事务已经执行的修改,恢复到事务开始之前的数据状态。

  • MVCC多版本控制:Undo Log在实现多版本并发控制(MVCC)中也起到关键作用。通过记录数据的历史版本,系统可以提供一致的读视图,支持并发事务的读取和修改。

组成:也是有undo buffer和undo logo日志组成

原理:如我们执行下面一条删除语句:

 delete from user where id = 1;

那么此时undo log就会记录一条对应的insert语句(反向),以保证事务回滚时,将数据还原回去。

Undo log存储由InnoDB的存储引擎实现,数据保存再innoDB的数据文件中,再存储引擎中,undo log是采用分段的方式进行存储的。rollback segment称为回滚段。在MySQL5.5之后,可以支持128个rollback segment,分别从resg slot0 - resg slot127,每一个resg slot,也就是每一个回滚段,内部由1024个undo segment 组成,即总共可以记录128 * 1024个undo操作。

undo log日志存放的信息如下

 

  • undo log日志里面不仅存放着数据更新前的记录,还记录着RowID、事务ID、回滚指针,其中事务ID每次递增,回滚指针第一次如果是insert语句的话,回滚指针为null,第二次update之后undo log的回滚指针就会指向刚刚那一条undo log日志,以此类推形成了一条undo log的回滚链,便于找到该记录的历史版本

  • 在事务提交之前会将数据备份到undo buffer,然后由undo buffer持久化到磁盘中的undo log文件中,此时undo log保存了之前未提交之前的操作日志,接着将操作的数据,持久化到数据文件中(更新数据前记录undo log)

例如:假设有A、B两个数据,值分别为1,2。

A. 事务开始
B. 记录A=1到undo log中
C. 修改A=3
D. 记录B=2到undo log中
E. 修改B=4
F. 将undo log写到磁盘 -------undo log持久化
G. 将数据写到磁盘 -------数据持久化
H. 事务提交 -------提交事务

 

Bin Log

Binlog 是 MySQL 中用于记录数据库修改操作的日志文件。binlog记录的是逻辑日志,即原始的sql语句,是mysql自带的。是mysql数据库中的二进制日志文件,用于记录数据库的所有更改操作。他以二进制的形式存储,包含了对数据库执行所有修改操作的详细信息,如插入、更新、删除等。BInlog是Mysql事务日志的一部分,与Redo log一起,确保数据库的一致性,持久性,以及提供一些关键的数据库管理功能。

作用

用于数据备份、主从同步、数据恢复

  • 主从复制:在主从复制中,主服务器将所有的更改记录到Binlog中,而从服务器通过读取主服务器的Binlog并执行相同的更改来保持数据同步。这实现了数据的复制和冗余,提高了系统的可用性和可靠性。

  • 数据库备份:Binlog也是数据库备份的一部分。通过备份Binlog,可以实现增量备份,只备份自上次完整备份以来发生的变更,从而减少备份的时间和存储成本。

  • 数据恢复:在数据库崩溃或数据丢失时,可以使用 Binlog 进行数据恢复。通过重放 Binlog 中记录的所有操作,可以将数据库恢复到某个特定时间点。

组成

事件头(Event Header)

  • 包含事件的时间戳、类型、服务器ID等信息。

事件数据(Event Data)

  • 具体记录了对数据库表的修改操作。根据事件类型不同,事件数据也有所不同,比如可能是表结构变更、行数据修改等。

文件格式描述符(File Format Descriptor)

  • 描述了 Binlog 文件的格式信息,通常在 Binlog 文件的开头。

Binlog 的类型

MySQL 的 Binlog 有三种格式:

  1. STATEMENT(语句模式)

    • 记录的是执行的 SQL 语句。优点是日志文件较小,缺点是某些非确定性的操作可能导致复制不一致。

    • 记录原始SQL语句,会导致更新时间与原库不一致。 比如 update_time=now()

  2. ROW(行模式)

    • 记录的是每行数据被修改的具体信息。优点是可以确保复制的一致性,缺点是日志文件较大。

  3. MIXED(混合模式)

    • 结合了语句模式和行模式的优点。MySQL 自动选择最合适的格式记录日志。

    • Statement和Row的混合模式,默认采用Statement模式,涉及日期、函数相关的时候采用Row模式,既减少了数据量,又保证了数据一致性。

    这时,MySQL并不会立即刷盘,而是依据sync_binlog参数决定刷盘的频率和时机。

    参数值含义
    0(延迟写)每次提交事务都不会刷盘,由系统自己决定什么时候刷盘,可能会丢失数据。
    1(实时写)每次提交事务,都会刷盘,性能较差。
    N(延迟写)提交N个事务后,才会刷盘。

事务提交前刷盘过程

事务开始

  • 执行一组数据库操作,如插入、更新、删除等。

写入 Undo Log 缓冲区

  • 在执行修改操作之前,首先将修改前的记录写入 Undo Log 缓冲区。这一步骤确保了即使在事务失败或回滚时,可以恢复到修改前的状态。

写入Redo Log缓冲区

  • 同时,修改操作的Redo Log记录也写入内存中的Redo Log缓冲区。

写入 Binlog 缓冲区

  • 在执行这些操作的过程中,MySQL 会将这些操作记录在 Binlog 缓冲区中。

准备提交

  • 当事务准备提交时,MySQL 会将 Binlog 缓冲区的内容写入磁盘上的 Binlog 文件。这一步是为了确保即使在事务提交之后发生系统崩溃,事务的操作记录仍然可以从 Binlog 中恢复。

  • 当事务准备提交时,MySQL会将Binlog缓冲区的内容写入到磁盘上的Binlog文件中。

    这时,MySQL并不会立即刷盘,而是依据sync_binlog参数决定刷盘的频率和时机。

写入 Redo Log

  • 将事务的变更记录写入到 InnoDB 的 Redo Log 中。这也是在事务提交之前进行的,以确保数据的持久性。

  • 根据 innodb_flush_log_at_trx_commit 参数的设置,决定是否立即将 Redo Log 刷盘到磁盘。

写入 Undo Log 文件

  • 在事务准备提交时,MySQL 会将 Undo Log 缓冲区的内容写入到磁盘上的 Undo Log 文件中,以确保事务的回滚信息持久化。

然后提交事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/27626.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【java】指定类,指定package,找到package下面,这个类的所有子类

目录 ■java代码 ■注意 ■运行效果 ■包的结构 ■java代码 package com.sxz.study.reflect;import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Enumeration; import java.util.List;public class …

缓存技术实战[一文讲透!](Redis、Ecache等常用缓存原理介绍及实战)

目录 文章目录 目录缓存简介工作原理缓存分类1.按照技术层次分类2.按照应用场景分类3.按照缓存策略分类 应用场景1.硬件缓存2.软件缓存数据库缓存Web开发应用层缓存 3.分布式缓存4.微服务架构5.移动端应用6.大数据处理7.游戏开发 缓存优点缓存带来的问题 常见常用Java缓存技术1…

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进…

树莓派等Linux开发板上使用 SSD1306 OLED 屏幕,bullseye系统 ubuntu,debian

Raspberry Pi OS Bullseye 最近发布了,随之而来的是许多改进,但其中大部分都在引擎盖下。没有那么多视觉差异,最明显的可能是新的默认桌面背景,现在是大坝或湖泊上的日落。https://www.the-diy-life.com/add-an-oled-stats-display-to-raspberry-pi-os-bullseye/ 通过这次操…

Spring中获取bean的三种常用方式

在Spring框架中,一个bean是指由SpringIOC容器管理的一个Java对象。Spring提供了一种依赖注入的机制,可以通过在配置文件中配置bean的定义,实现在代码中通过IOC容器获取bean的实例。 方法一 根据名称获取Bean public class App {public sta…

ArrayList<Integer>()转为int[]的几种方式

目录 方法1:使用Arrays类中的copyOfRange方法 示例代码(方法一) 方法2:利用Java Streams 示例代码(方法二) 注意事项 方法1:使用Arrays类中的copyOfRange方法 Arrays.copyOfRange()可以用…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 特惠寿司(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 特惠寿司(100分) 🌍 评测功能需要订阅专栏后私信联系清隆解…

王思聪日本街头在被偶遇

王思聪日本街头再被偶遇,甜蜜约会日常成网友热议焦点近日,有网友在日本街头再次偶遇了“国民老公”王思聪,这次他不仅携带着一位美丽的女友,还展现出了两人之间亲密无间的互动,让不少网友感叹:这真的是每天…

如何使用 STARTTLS 加密 OpenLDAP 连接

简介 OpenLDAP提供了一个灵活且得到良好支持的LDAP目录服务。然而,默认情况下,服务器本身是通过未加密的网络连接进行通信的。在本指南中,我们将演示如何使用STARTTLS加密连接到OpenLDAP,以将传统连接升级为TLS。我们将使用Ubunt…

八、BGP

目录 一、为何需要BGP? 二、BGP 2.1、BGP邻居 2.2、BGP报文 2.3、BGP路由 2.4、BGP通告遵循原则 2.5、BGP实验 第一步:建立邻居 第二步:引入路由 BGP路由黑洞 路由黑洞解决方案 1、IBGP全互联 2、路由引入 3、MPLS 多协…

甘肃这款饼子很火 你是否有吃过呢

白吉饼那独特的外形,圆圆的十分可爱。👏它的表皮酥脆,内里绵软,麦香四溢。😋拿在手里沉甸甸的,就知道用料十足。 无论是直接吃,感受那纯粹的面香,还是夹上腊汁肉,变成美味…

web前端换行命令:深入解析与实用技巧

web前端换行命令:深入解析与实用技巧 在Web前端开发中,换行命令是一项基础而重要的技能。它涉及到文本排版、布局控制以及用户体验的多个方面。本文将通过四个方面、五个方面、六个方面和七个方面的详细阐述,带您深入了解Web前端换行命令的奥…

ThinkPHP5.0 apache服务器配置URL重写,index.php去除

本地环境wamp .htaccess文件代码 <IfModule mod_rewrite.c>Options FollowSymlinks -MultiviewsRewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] </IfModule> 踩过这个坑&a…

关于编程思想

面向过程思想 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了 JS就是典型的面向过程的编程语言 优点&#xff1a; 性能比面向对象高&#xff0c;适合跟硬件联系很紧密的东西&…

000.双指针方法题解目录

000.双指针方法题解目录 167. 两数之和 II - 输入有序数组&#xff08;中等&#xff09;

dbForge Studioor MySQL v6 解锁版 安装教程(MYSQL数据库客户端)

前言 dbForge Studioor MySQL是一个在Windows平台被广泛使用的MySQL客户端&#xff0c;它能够使MySQL开发人员和管理人员在一个方便的环境中与他人一起完成创建和执行查询&#xff0c;开发和调试MySQL程序&#xff0c;自动化管理MySQL数据库对象等工作。 一、下载地址 下载链…

什么是GPT-4

什么是GPT-4 ChatGPT 可以说&#xff0c;ChatGPT的发展&#xff0c;主要的分水岭在GPT-4&#xff0c;GPT-4主要是文本对话&#xff0c;且训练度也不够完善。GPT-4之后不但训练度得到了巨大提升&#xff0c;模型支持的参数量更是预计有1万亿参数&#xff0c;在这之后出现的GPT-4…

图书管理系统(SpringBoot+SpringMVC+MyBatis)

目录 1.数据库表设计 2.引入MyBatis和MySQL驱动依赖 3.配置数据库&日志 4.Model创建 5.用户登录功能实现 6.实现添加图书功能 7.实现翻页功能 1.数据库表设计 数据库表是应⽤程序开发中的⼀个重要环节, 数据库表的设计往往会决定我们的应⽤需求是否能顺利实现, 甚至决…

探索档案未来,尽在ARCHE-2024

2024年第三届上海国际智慧档案展览会暨高峰论坛&#xff08;ARCHE-2024&#xff09;将于2024年6月19日至21日在上海跨国采购会展中心隆重举行。深圳市铨顺宏科技有限公司应邀参展&#xff0c;将以全新形象盛装亮相&#xff0c;展示其在档案管理领域的最新技术和解决方案。 ARC…

UC Berkeley简介以及和Stanford的区别与联系

UC Berkeley Source: Google Map 中文版 UC Berkeley&#xff0c;全称University of California, Berkeley&#xff0c;是一所位于美国加利福尼亚州伯克利市的世界知名公立研究型大学。以下是关于UC Berkeley的详细介绍&#xff1a; 学术声誉和排名 学术声誉&#xff1a; U…