【MySQL】redolog、undolog和binlog日志文件详解

【MySQL】redolog、undolog和binlog日志文件详解

  • 前言
  • redolog
    • 设计目标
    • 记录内容
    • 写入策略
  • undolog
    • 设计目标
    • 记录内容
    • 写入策略
  • binlog
    • 设计目标
    • 记录内容
    • 写入策略
  • 小结

前言

当谈论MySQL数据库的日志文件时,通常会涉及到三种主要类型:redo log(重做日志)、undo log(回滚日志)和binlog(二进制日志)。每种日志文件都有自己的设计目标、记录内容和写入策略,下面我会逐一介绍它们。

redolog

设计目标

  • 保证事务的持久性:Redo Log的主要设计目标是在数据库崩溃或发生故障时,确保已提交的事务对数据库的修改能够被恢复,以保证数据的持久性。
  • 提高性能:通过将数据修改操作写入重做日志,MySQL可以延迟将这些操作同步到磁盘,从而提高数据库的写入性能。

记录内容

  • Redo Log中记录了每个事务所做的修改操作,如插入、更新、删除等。这些记录通常以物理日志记录的形式存在,记录的是更新之后的值。
  • 除了修改操作的内容外,Redo Log还包含了事务的一些元数据信息,如事务ID、事务状态等。

写入策略

  • Redo Log的写入是顺序追加(append)的方式进行的,即将事务的修改操作追加到日志文件的末尾。
  • Redo Log采用了WAL(Write-Ahead Logging)的机制,即在事务进行数据修改操作之前,先将对应的修改记录写入Redo Log,然后再将修改应用到内存中的数据页,这样可以确保事务的修改记录先于实际数据的修改被持久化到磁盘。

undolog

设计目标

  • 提供事务的回滚支持:Undo Log的主要设计目标是提供事务回滚的支持,即在事务发生错误或被回滚时,能够恢复到事务开始之前的状态。因此undolog能保证事务的原子性。
  • 支持MVCC(Multi-Version Concurrency Control):Undo Log也是MVCC机制的重要组成部分,用于存储事务修改前的数据版本,以支持并发读取和写入,从而提高数据库性能。

记录内容

  • Undo Log记录了此次事务「开始前」的数据状态,这些记录通常以逻辑日志记录的形式存在,记录的是更新之前的值。
  • Undo Log通常以逻辑日志记录的形式存在,记录了事务对数据的修改操作,如将某行数据修改为何种值、删除了哪些数据等。

写入策略

  • Undo Log的写入通常也是顺序追加的方式进行的,将事务的逆操作记录追加到日志文件的末尾。
  • Undo Log的写入顺序通常与事务的提交顺序相反,即先写入的事务的Undo Log记录会位于后面,这样可以确保在回滚操作时按照相反的顺序进行恢复。

binlog

设计目标

  • 恢复(recovery):某些数据的恢复需要二进制日志,例如,在一个数据库全备文件恢复后,用户可以通过二进制日志进行point-in-time的恢复。
  • 复制(replication):其原理与恢复类似,通过复制和执行二进制日志使一台远程的MySQL数据库(一般称为slave或standby)与一台MySQL数据库(一般称为master或primary)进行实时同步。
  • 审计(audit):用户可以通过二进制文件中的信息来进行审计,判断是否有对数据库进行注入的攻击。

记录内容

  • Binlog记录了数据库中的修改操作,包括对表的增删改操作以及对表结构的变更操作等。
  • Binlog以一种较为简洁的格式记录了每个修改操作的元信息,如操作类型、受影响的表名、修改前后的数据等。

写入策略

  • Binlog的写入通常是异步的,即MySQL会将修改操作先写入到Binlog缓冲区中,然后由后台线程将缓冲区中的内容定期写入到Binlog文件中。
  • 对于复制从库,Binlog的写入通常会在事务提交后立即进行,以确保从库能够尽快获取到主库的数据变更。

小结

  • redo log(重做日志):是 Innodb 存储引擎层生成的日志(它是物理日志,记录的是数据的物理修改信息)。实现了事务中的持久性,主要用于掉电等故障恢复。redo log 记录了此次事务「完成后」的数据状态,记录的是更新之后的值;

  • undo log(回滚日志):是 Innodb 存储引擎层生成的日志(它是逻辑日志,记录的是数据的逻辑修改信息)。实现了事务中的原子性和一致性,主要用于事务回滚和 MVCC。

  • binlog(归档日志):是 Server 层生成的日志,主要用于数据备份和主从复制。

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

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

相关文章

使用Python进行自然语言处理:情感分析

使用Python进行自然语言处理的热门应用:情感分析 自然语言处理(NLP)是人工智能领域中的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。在NLP的诸多应用中,情感分析是一项备受关注的热门应用之一。情感分析(Sentiment Analysis)是通过分析文本中的情感色…

陪诊小程序开发:线上陪诊行业的发展

在人口老龄化的严重的当下,老人看病也更加困难,而陪诊行业作为一个新型行业,正在走入人们的生活中,帮助大众解决看病难等问题,为大众带来便捷高效的就医环境。 随着互联网时代的到来,各行各业也都开始向线…

FaceDiffuser 部署笔记

目录 依赖项安装: win11 ffmpeg合并报错 修改后代码: facebook/hubert-base-ls960报错 我的解决方法: DiffSpeaker网络音频编码器: 头模加载 transformers 依赖项安装: "tokenizers": "tokeniz…

设置Ollama在局域网中访问的方法(Ubuntu)

趁着Llama3的热度试了一下Ollama,果然部署推理大模型很有用。一个现实的需求是,如果我们要在局域网中访问Ollama上大模型的服务,应该怎么办呢?参考了一下其他博客的方法 例如:一分钱不花!手把手教你部署Go…

Android system — 链接器命名空间共享库配置方法(Android 11后)

Android system — 链接器命名空间共享库配置方法 1. 应用进程1.1 应用进程类加载器的命名空间初始化1.1.1 OpenNativeLibrary1.1.2 LibraryNamespaces::Create 1.2 配置共享库位置 2. native进程2.1 native 命名空间配置初始化2.1.1 android_namespace_t::is_accessible2.1.2 …

清理docker缓存

要清理Docker缓存,你可以使用以下命令: docker system prune 这个命令会删除所有未使用的容器、网络、镜像(默认不包括Tag为none的)和悬空的镜像。如果你也想要删除所有未使用的镜像,不仅仅是悬空的,可以添加-a参数:…

swift语言学习总结

Var 表示变量, let表示常量。数组和map, 都用中括号[].可以直接赋值。可以用下标或键访问。 var shoppingList ["catfish", "water", "tulips", "blue paint”]//最后一个可以加逗号。 shoppingList[1] "bo…

Web开发中的网络安全: 常见攻击及防范策略

在Web开发的世界里,网络攻击是一种常见且潜在的威胁。理解这些攻击如何运作并采取措施防范它们对于构建安全的Web应用至关重要。本文将介绍几种常见的Web攻击,提供防范策略,并以实例说明如何防止这些攻击。 SQL注入 概要: SQL注入攻击是攻击…

Python+Selenium基于PO模式的Web自动化测试框架

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供…

Linux pppstats命令教程:如何详解PPP连接的统计信息(附案例详解和注意事项)

Linux pppstats命令介绍 pppstats命令用于显示活动的PPP(点对点协议)连接的统计信息。这些统计信息包括发送和接收的数据包数量、压缩前和压缩后的数据量、IPCP和LCP协议的状态等。 Linux pppstats命令适用的Linux版本 pppstats命令在大多数Linux发行…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.3-14.5

目录 第 8 周 14、 降维(Dimensionality Reduction)14.3 主成分分析问题14.4 主成分分析算法14.5 选择主成分的数量 第 8 周 14、 降维(Dimensionality Reduction) 14.3 主成分分析问题 主成分分析(PCA)是最常见的降维算法。 在 PCA 中,我们要做的是找到一个方向…

C++与或运算规则

文章目录 前言问题1问题2 前言 在笔试中遇到c或与运算的问题&#xff0c;在这记录 问题1&#xff1a;2024.4.28 问题1 下面代码的运行结果&#xff1a; #include <iostream> using namespace std; bool fun1(char ch){cout<<ch<<" ";if(ch >a…

react-lib 读取本地模板创建PDF

读取本地文件和读取远程的一样&#xff0c;都使用fetch去获取 async function modifyPdf() {let url ./template.pdflet existingPdfBytes await fetch(url).then(res > res.arrayBuffer()) // 这里也有问题要转一下const d new Uint8Array(existingPdfBytes)const pdfDo…

dremio数据湖sql行列转换及转置

1、行转列 (扁平化) 数据准备 表 aa 1.1 cross join unnest 在Dremio中&#xff0c;UNNEST 函数用于将数组或复杂类型的列&#xff08;如JSON、Map或Array类型&#xff09;中的值“炸裂”&#xff08;分解&#xff09;成多行. with aa as ( select 上海 as city, ARRAY[浦东…

Centos7_miniconda_devtools安装_R语言入门之R包的安装

因为有同事反馈安装R包很慢或卡住&#xff0c;提供了一个安装R包的命令给我测试&#xff0c;在安装过程中复现报错信息&#xff0c;把下载慢或卡顿的链接中的域名在防火墙中调整出口。 devtools::install_github("GreenleafLab/ArchR", ref"master", repo…

LLaMA Factory多卡微调的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

How to solve matplotlib Chinese garbled characters in Ubuntu 22.04

conda create -n huizhou python3.8conda activate huizhouconda install numpy matplotlibpip install mplfontsmplfonts init# 导入必要的库 import numpy as np import matplotlib.pyplot as plt# 创建角度数组&#xff0c;从0到2π x np.linspace(0, 2 * np.pi, 100)# 计算…

使用逆滤波算法deconvwnr恢复图像回复图像时,产生了很多横竖条纹。解决办法

使用逆滤波算法deconvwnr恢复图像回复图像时&#xff0c;产生了很多横竖条纹。解决办法 原来的代码 % 清除工作空间并关闭所有图形窗口 clear; clc; close all;% 读取原始图像 original_image imread(pic3.jpg);% 显示原始图像 subplot(131); imshow(original_image); title…

密码学python库PBC安装使用

初始化 使用环境云服务器&#xff08;移动云可以免费使用一个月&#xff09; 选择ubuntu18.04-64位 第一次进入linux命令行之后是没有界面显示的&#xff0c;需要在命令行下载。 这里按照其他云平台操作即可&#xff1a;Ubuntu18.04 首次使用配置教程(图形界面安装) 记录好登录…

用Stream流方式合并两个list集合(部分对象属性重合)

一、合并出共有部分 package com.xu.demo.test;import java.util.Arrays; import java.util.List; import java.util.stream.Collectors;public class ListMergeTest1 {public static void main(String[] args) {List<User> list1 Arrays.asList(new User(1, "Alic…