【MySQL是怎样运行的 | 第二篇】MySQL三大日志文件

在这里插入图片描述

文章目录

  • 2.MySQL三大日志文件
    • 2.1日志文件列表
      • 2.1.1 redo log
      • 2.1.2 bin log
      • 2.1.3 undo log
    • 2.2redo log日志详讲
    • 2.3 binglog和redo log有什么区别?
    • 2.4一条更新语句的执行过程

2.MySQL三大日志文件

2.1日志文件列表

  1. redo log:重做日志,记录了对于 InnoDB 表的每个写操作,不是 SQL 级别的,而是物理级别的,主要用于崩溃恢复
  2. undo log:回滚日志,记录数据被修改前的值,用于事务的回滚
  3. bin log:二进制日志,记录了所有修改数据库状态的 SQL 语句,以及每个语句的执行时间,如 INSERT、UPDATE、DELETE 等,但不包括 SELECT 和 SHOW 这类的操作
  4. slow query log:慢查询日志,记录执行时间超过 long_query_time 值的所有 SQL 语句。这个时间值是可配置的,默认情况下,慢查询日志功能是关闭的。可以用来识别和优化慢 SQL
  5. error log:错误日志,记录 MySQL 服务器启动、运行或停止时出现的问题

2.1.1 redo log

  1. redo log,重做日志
  2. 内容: 物理格式的日志,记录的是物理数据页面的修改的信息,其 redo log 是顺序写入 redo log file 的物理文件中去的
  3. 作用: 确保事务的持久性。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启 mysql 服务的时候,根据 redo log 进行重做,从而达到事务的持久性这一特性

2.1.2 bin log

  1. bin log,二进制日志
  2. 内容: 所有执行增删改的SQL 语句,以及每个语句的执行时间,以便进行数据恢复和主从复制
  3. 作用: 用于复制,在主从复制中,从库利用主库上的 binlog 进行重播,实现主从同步。 用于数据库的基于时间点的还原

2.1.3 undo log

  1. undo log,回滚日志
  2. 内容: 逻辑格式的日志,在执行 undo 的时候,仅仅是将数据从逻辑上恢复至事务之前的状态,而不是从物理页面上操作实现的,这一点是不同于 redo log 的
  3. 作用: 保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读

2.2redo log日志详讲

  1. 原因:mysql,如果每次更新操作都要写进磁盘,然后磁盘要找到对应记录,然后再更细,整个过程 io 成本、查找成本都很高
  2. 解决方案:WAL 技术(Write-Ahead Logging)。先写日志,再写磁盘
  3. 具体过程:
    1. 当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 里面,并更新内存,这个时候更新就算完成了。
    2. 同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。
    3. InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB,那么总共就可以记录 4GB 的操作。从头开始写,写到末尾就又回到开头循环写

2.3 binglog和redo log有什么区别?

  1. 文件级别不同:
    1. redo log 是 InnoDB 引擎特有的
    2. binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用
  2. 文件内容不同:
    1. redo log 是物理日志,记录的是 “在某个数据页上做了什么修改”
    2. binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如 “给 ID=2 这一行的 c 字段加 1
  3. 文件写入不同:
    1. redo log 是循环写的,空间固定会用完;
    2. binlog 是可以追加写入的。“追加写” 是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志

2.4一条更新语句的执行过程

  1. 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2 这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。
  2. 执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
  3. 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。然后告知执行器执行完成了,随时可以提交事务。
  4. 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。、
  5. 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成

在这里插入图片描述

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

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

相关文章

随着软件开发方法的不断演进,Cobol 程序如何适应敏捷开发和持续集成/持续部署(CI/CD)的流程?

Cobol是一种古老的编程语言,最初设计用于商业数据处理。虽然它不是为敏捷开发和CI/CD流程而设计的,但仍然可以通过一些技术和方法来使其与这些现代开发流程兼容。 以下是一些方法可以帮助Cobol程序适应敏捷开发和CI/CD流程: 拆分和模块化&am…

使用文章健康检查指标彻底改变您的知识库

在当今快节奏的数字世界中,向客户提供准确和最新的信息比以往任何时候都更加重要。保持知识库内容准确、相关且高效可能是一项艰巨的任务,尤其是在处理大型信息库时。幸运的是,Baklib 的人工智能支持的文章健康检查指标可以提供一个解决方案来…

JDK 8 升级 17 及 springboot 2.x 升级 3.x 指南

JDK 8 升级 17 简介 从 JDK 8 升级到 JDK 17 的过程中,有几个主要的变化,特别是 Java Platform Module System (JPMS) 的引入,以及一些包路径的调整。以下是与 JDK 17 相关的一些重要变化: Java Platform Module System (JPMS) …

使用Linkerd进行服务网格配置与监控

在现代微服务架构中,服务网格技术正在迅速成为增强服务间通信的解决方案。Linkerd作为一个轻量级的服务网格,提供了重要的功能,如负载均衡、故障恢复和监控。这篇博客将详细介绍如何使用Linkerd配置服务网格,并通过Java代码示例展…

面试题:MySQL 索引

1. 谈一下你对于MySQL索引的理解?(为什么MySQL要选择B+树来存储索引) MySQL的索引选择B+树作为数据结构来进行存储,使用B+树的本质原因在于可以减少IO次数,提高查询的效率,简单来说就是可以保证在树的高度不变的情况下存储更多的数据: IO效率的提高:在MySQL数据库中,…

E19.【C语言】练习:数组

有序序列合并 描述 输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。 数据范围: 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000 输入描述: 输入包含三行, 第一行包含两个正整数n, m,用空…

大模型的经典面试问题及答案

大语言模型(LLM)在人工智能中变得越来越重要,在各个行业都有应用。随着对大语言模型专业人才需求的增长,本文提供了一套全面的面试问题和答案,涵盖了基本概念、先进技术和实际应用。如果你正在为面试做准备&#xff0c…

ABB机器人EGM功能简单应用

EGM中使用的是Protocol Buffer2的协议,从Egm.proto模板文件中可以了解到,协议版本没有定义默认为proto2,目前最新版本为proto3。PC安装了RobotStudio 6.08后,在如下路径可以找到egm.proto模板文件。 C:\ProgramData\ABB Industri…

ISP-LSC

1. 概述 Lens shading分为两个部分,亮度均匀性(luma shading correction),色彩均匀性(colour shading correction)。 lens 的各位置和中心的透射率不同:luma shading lens 对不同光谱的shift 不…

11. kubernetes资源——configmap配置映射

kubernetes资源——configmap配置映射 一、configmap配置映射1、创建configMap, 存MySQL配置2、创建MySQL pod 一、configmap配置映射 存放配置文件内容 1、创建configMap, 存MySQL配置 apiVersion: v1 kind: ConfigMap metadata:name: test-mysql-co…

NOILinux2.0安装

NOI官方已发布NOILinux2.0,可是如何安装使用呢?我来教你。 首先下载VMWare和NOILinux2.0的ios,当然你用什么虚拟机软件都可以。这里我用的是VMware。 NOIlinux2.0的下载链接: NOI Linux 2.0发布,将于9月1日起正式启用…

Cesium 体积云效果

Cesium 体积云效果(局部) 原理:RayMarching光线步进噪声,需要修改源码让cesium支持3D纹理(texImage3D) 源码修改思路:Cesium中使用Sampler3D,3D纹理,实现体渲染 感谢思…

Debian12 安装Docker 用 Docker Compose 部署WordPress

服务器准备: 以root账号登录,如果不是root,后面指令需要加sudo apt update apt install apt-transport-https ca-certificates curl gnupg lsb-release添加GPG密钥,推荐国内源 curl -fsSL https://mirrors.aliyun.com/docker…

图的遍历:深度优先搜索(DFS)

引言 图遍历是指按照一定的顺序访问图中的每个顶点。遍历图的两种主要方法是深度优先搜索(Depth-First Search, DFS)和广度优先搜索(Breadth-First Search, BFS)。本文将详细介绍深度优先搜索的定义、算法及其实现。 深度优先搜…

【Sklearn-驯化】一文搞懂很难的条件随机场系列算法:hmm、crf以及实践

【Sklearn-驯化】一文搞懂很难的条件随机场系列算法:hmm、crf以及实践 本次修炼方法请往下查看 🌈 欢迎莅临我的个人主页 👈这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合,智慧小天地! 🎇 免费获取相…

【Python从入门到进阶】61、Pandas中DataFrame对象的操作(二)

接上篇《60、Pandas中DataFrame对象的操作(一)》 上一篇我们讲解了DataFrame对象的简介、基本操作及数据清洗相关的内容。本篇我们来继续讲解DataFrame对象的统计分析、可视化以及数据导出与保存相关内容。 一、DataFrame的统计分析 在数据分析和处理中…

C#与欧姆龙PLC 通信——fins udp协议

前言 欧姆龙PLC在工控领域占有很大的市场份额,在上位机编程领域,实现上位机和欧姆龙PLC的通信也是必备的技能,上位机和PLC可以通过fins udp和fins tcp协议通信,本文介绍的是fins udp协议,该协议具有传输速度快的特点,为了帮助大家学习fins udp协议,我编写了“欧姆龙Fin…

从零开始学习网络安全渗透测试之基础入门篇——(四)反弹SHELL不回显带外正反向连接防火墙出入站文件上传下载

一、反弹SHELL 反弹SHELL(Reverse Shell)是一种网络攻击技术,它允许攻击者在一个被入侵的计算机上执行命令,即使该计算机位于防火墙或NAT(网络地址转换)之后。通常,当攻击者无法直接连接到目标…

堡垒机介绍

堡垒机,也被称为跳板机、跳板服务器或堡垒服务器,是一种网络安全设备,它在网络安全领域扮演着重要角色。以下是关于堡垒机的详细解析: 一、定义与功能 定义:堡垒机是一种用于控制和管理网络安全的重要工具&#xff0…

不要对数组使用多态

类继承的最重要的特性是你可以通过基类指针或引用来操作派生类。这样的指针或引用具有行为的多态性,就好像它们同时具有多种形态。C允许你通过基类指针和引用来操作派生类数组。不过这根本就不是一个特性,因为这样的代码几乎从不如你所愿地那样运行。 假…