MySQL undo log,redo log和bin log日志文件的生成时间点、层级归属、存储位置及生命周期详解
问题:
假如库名叫做A库,表名叫B表,undo log,redo log和bin log,这些日志文件的生成的时间点是什么?是在mysql的哪一层生成的?哪些文件是有buffer的?哪些日志文件是存在磁盘上的?哪些存在内存中?另外如果有buffer,那这个buffer什么时候刷盘的,他会一直存在还是什么时候会被清除掉?如果存在磁盘上,那么它的名字叫什么?如果存在磁盘上,那他是会一直存在还是说什么时候会被清除掉?
答案:
涉及库名 A 和表名 B 的日志行为与全局日志机制一致,日志本身不按库表独立存储
MySQL 日志文件的生成时间点、层级归属、存储位置及生命周期详解
1. Undo Log
生成时间点:
| 存储位置 | 文件名/结构 | 生命周期 |
| 内存 | Undo Log Buffer | 事务执行期间暂存 Undo Log 条目,提交后可能保留(支持 MVCC) |
| 磁盘 | undo_001、undo_002(独立 Undo Tablespace,MySQL 8.0+ 默认)或 ibdata1(系统表空间,旧版本) | - 通过 Redo Log 间接保护持久性。 - 事务提交后,Undo Log 段可能被回收(若不被 MVCC 或长事务依赖)。 |
-
事务修改数据时:执行 INSERT/UPDATE/DELETE 前生成,用于事务回滚和 MVCC。
-
层级归属:存储引擎层(InnoDB)。
存储与生命周期:
Buffer 刷盘时机:
-
间接刷盘:Undo Log 的修改会先写入 Redo Log Buffer,事务提交时根据 innodb_flush_log_at_trx_commit 决定 Redo Log 刷盘,从而间接保证 Undo Log 的持久性。
-
清理机制:后台 Purge 线程异步清理不再需要的 Undo Log。
2. Redo Log
生成时间点:
| 存储位置 | 文件名/结构 | 生命周期 |
| 内存 | Redo Log Buffer | 事务执行期间暂存 Redo Log 条目,提交时根据配置刷盘。 |
| 磁盘 | ib_logfile0、ib_logfile1(默认文件名) | - 循环写入,日志空间重复利用。 - Checkpoint 推进后,旧日志可被覆盖。 |
-
数据页修改时:每次数据页变更(如 UPDATE)生成物理日志,确保崩溃恢复。
-
层级归属:存储引擎层(InnoDB)。
存储与生命周期:
Buffer 刷盘时机:
-
事务提交时:若 innodb_flush_log_at_trx_commit=1,提交时同步刷盘。
-
每秒异步刷盘:若 innodb_flush_log_at_trx_commit=0/2,由后台线程每秒刷盘。
-
Buffer 清理:刷盘后 Redo Log Buffer 空间可复用。
3. Bin Log
生成时间点:
| 存储位置 | 文件名/结构 | 生命周期 |
| 内存 | Binlog Cache(每个线程独立) | 事务执行期间暂存 Binlog 条目,提交时根据配置刷盘。 |
| 磁盘 | mysql-bin.000001(默认前缀) | - 按顺序写入,文件大小达 max_binlog_size 后切换新文件。 - 根据 expire_logs_days 自动清理过期文件。 |
-
事务提交时:记录逻辑操作(如 SQL 语句或行变更),用于主从复制和逻辑恢复。
-
层级归属:服务层(Server Layer)。
存储与生命周期:
Buffer 刷盘时机:
-
事务提交时:若 sync_binlog=1,提交时同步刷盘。
-
依赖 OS 刷盘:若 sync_binlog=0,由操作系统决定刷盘时机。
-
Buffer 清理:事务提交后 Binlog Cache 立即释放。
4. 日志文件总结
| 日志类型 | 生成时间点 | 生成层级 | 内存 Buffer | 磁盘文件 | Buffer 刷盘时机 | 磁盘文件清理机制 |
| Undo Log | 事务修改数据时 | 存储引擎层(InnoDB) | Undo Log Buffer | undo_001 或 ibdata1 | 随 Redo Log 刷盘间接持久化 | Purge 线程清理(无长事务阻塞) |
| Redo Log | 数据页修改时 | 存储引擎层(InnoDB) | Redo Log Buffer | ib_logfile0、ib_logfile1 | 提交时或每秒刷盘(依赖配置) | Checkpoint 推进后循环覆盖 |
| Bin Log | 事务提交时 | 服务层 | Binlog Cache | mysql-bin.000001 等 | 提交时或依赖 OS(依赖配置) | 按 expire_logs_days 自动清理过期文件 |
5. 注意事项(可能存在版本差异)
-
Undo Log 存储位置:
-
MySQL 8.0+ 默认使用独立 Undo Tablespace(undo_001),旧版本可能存储在 ibdata1。
-
-
Bin Log 格式:
-
支持 Statement、Row、Mixed 格式,文件名固定前缀为 mysql-bin。
-
-
Redo Log 文件大小:
-
由 innodb_log_file_size 和 innodb_log_files_in_group 控制,默认 2 个文件循环使用。
-
6. 总结
-
Undo Log:事务修改时生成,存储引擎层管理,内存缓冲后通过 Redo Log 间接持久化,磁盘文件可独立或共享。
-
Redo Log:数据变更时生成,存储引擎层管理,内存缓冲后按配置刷盘,磁盘文件循环覆盖。
-
Bin Log:事务提交时生成,服务层管理,内存缓冲后按配置刷盘,磁盘文件按时间或大小清理。
建议配置:
-
高安全场景:innodb_flush_log_at_trx_commit=1 + sync_binlog=1。
-
高性能场景:innodb_flush_log_at_trx_commit=2 + sync_binlog=0(需容忍少量数据丢失风险)。
相关文章:
MySQL undo log,redo log和bin log日志文件的生成时间点、层级归属、存储位置及生命周期详解
问题: 假如库名叫做A库,表名叫B表,undo log,redo log和bin log,这些日志文件的生成的时间点是什么?是在mysql的哪一层生成的?哪些文件是有buffer的?哪些日志文件是存在磁盘上的?哪些…...
吃一堑长一智
工作中经历,有感触记录下 故事一 以前在一家公司时,自己是一名开发人员,遇到问题请教领导解决方案,当时领导给了建议,后来上线后出问题了,背了锅。心里想的是领导说这样做的呀,为什么出问题还…...
DeepSeek基础之机器学习
文章目录 一、核心概念总结(一)机器学习基本定义(二)基本术语(三)假设空间(四)归纳偏好(五)“没有免费的午餐”定理(NFL 定理) 二、重…...
达梦有没有类似oerr的功能
在oracle 23ai的sqlplus中,直接看异常信息说明: 达梦没有此功能,但是可以造一个 cd /home/dmdba cat >err.sql<<eof set echo off set ver off set timing off set lineshow off set feedback off select * from V\$ERR_INFO wher…...
实战-网安
面试感受:网安公司前端实习 今天我有幸面试了一家网络安全公司的前端开发实习岗位,整个过程让我受益匪浅,也让我对未来的职业发展有了更清晰的认识。 首先,面试官非常专业且友好,整个面试氛围轻松但不失严谨。面试一开始,面试官简单介绍了公司背景和团队文化,让我对公…...
一文掌握Splash的详细使用
文章目录 1. 安装与启动 Splash1.1 使用 Docker 安装1.2 直接安装 2. 基本用法2.1 访问 Splash 界面2.2 使用 Splash 渲染页面2.3 使用 Lua 脚本 3. 高级用法3.1 处理 JavaScript3.2 截图与 PDF3.3 处理 AJAX 请求3.4 设置请求头3.5 处理 Cookies 4. 与 Scrapy 集成4.1 安装 Sc…...
从 Linux 服务器到前端到网关到后端业务逻辑的分析
前言 在现代 Web 应用程序的架构中,一个完整的请求处理流程涉及多个组件,涵盖了用户界面、服务器环境、网关层和后端业务逻辑。理解这一过程有助于优化系统性能、提高用户体验,并确保系统的可维护性和可扩展性。本文将详细分析从 Linux 服务…...
Java中的Stream API:从入门到实战
引言 在现代Java开发中,Stream API 是处理集合数据的强大工具。它不仅让代码更加简洁易读,还能通过并行处理提升性能。本文将带你从基础概念入手,逐步深入Stream API的使用,并通过实战案例展示其强大功能。 1. 什么是Stream API…...
【python随手记】——读取文本文件内容转换为json格式
文章目录 前言一、TXT文件转换为JSON数组1.txt文件内容2.python代码3.输出结果 二、TXT文件转换为JSON对象1.txt文件2.python代码3.输出结果 前言 场景:用于读取包含空格分隔数据的TXT文件,并将其转换为结构化JSON文件 一、TXT文件转换为JSON数组 1.tx…...
【蓝桥杯】第十五届省赛大学真题组真题解析
【蓝桥杯】第十五届省赛大学真题组真题解析 一、智能停车系统 1、知识点 (1)flex-wrap 控制子元素的换行方式 属性值有: no-wrap不换行wrap伸缩容器不够则自动往下换行wrap-reverse伸缩容器不够则自动往上换行 (2࿰…...
MybatisPlus-扩展功能-枚举处理器
在Mybatis里有一个叫TypeHandler的类型处理器,我们常见的PO当中的这些成员变量的数据类型,它都有对应的处理器,因此它就能自动实现这些Java数据类型与数据库类型的相互转换。 它里面还有一个叫EnumOrdinalTypeHandler的枚举处理器࿰…...
力扣2454. 下一个更大元素 IV
力扣2454. 下一个更大元素 IV 题目 题目解析及思路 题目要求对于每个数,找到右边比它大的第二个数,并记录在ans数组中 如果是右边第一个大的,就用一个递减栈即可,栈顶元素如果<当前元素则弹出 第二个大数就要利用弹出的栈顶…...
unity学习51:所有UI的父物体:canvas画布
目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载,导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas,UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…...
Ollama部署与常用命令
Ollama是一款开源工具,其目标是简化大语言模型在本地环境的部署和使用。它支持多种流行的开源大语言模型,如 Llama 2、Qwen2.5等。 通过Ollama,用户无需具备深厚的技术背景,就能在普通的消费级硬件上快速搭建一个强大的语言处理环…...
Visual Studio Code 远程开发方法
方法1 共享屏幕远程控制,如 to desk, 向日葵 ,像素太差,放弃 方法2 内网穿透 ssh 第二个方法又很麻烦,尤其是对于 windows 电脑,要使用 ssh 还需要额外安装杂七杂八的东西;并且内网穿透服务提供商提供的…...
C语言预编译
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文一、预处理的作用与流程…...
汽车智能制造企业数字化转型SAP解决方案总结
一、项目实施概述 项目阶段划分: 蓝图设计阶段主数据管理方案各模块蓝图设计方案下一阶段工作计划 关键里程碑: 2022年6月6日:项目启动会2022年12月1日:系统上线 二、总体目标 通过SAP实施,构建研产供销协同、业财一…...
flowable-ui 的会签功能实现
场景:在进行智慧保时通开发时,有个协作合同入围功能,这个功能的流程图里有个评审小组,这个评审小组就需要进行会签操作,会签完成后,需要依据是否有不通过的情况选择下一步走的流程 思考步骤: 首…...
Spring Boot 与 MyBatis 数据库操作
一、核心原理 Spring Boot 的自动配置 通过 mybatis-spring-boot-starter 自动配置 DataSource(连接池)、SqlSessionFactory 和 SqlSessionTemplate。 扫描 Mapper 接口或指定包路径,生成动态代理实现类。 MyBatis 的核心组件 SqlSessionF…...
大连指令数据集的创建--数据收集与预处理_02
1.去哪儿爬虫 编程语言:Python爬虫框架:Selenium(用于浏览器自动化)解析库:BeautifulSoup(用于解析HTML) 2.爬虫策略 目标网站:去哪儿(https://travel.qunar.com/trav…...
vLLM专题(十四)-自动前缀缓存
一、介绍 自动前缀缓存(Automatic Prefix Caching,简称 APC)缓存现有查询的 KV 缓存,以便新查询如果与现有查询共享相同的前缀,可以直接重用 KV 缓存,从而跳过共享部分的计算。 注意 有关 vLLM 如何实现 APC 的技术细节,请参阅此处。 二、在 vLLM 中启用 APC 在 vLLM …...
STM32MP157A-FSMP1A单片机移植Linux系统SPI总线驱动
SPI总线驱动整体上与I2C总线驱动类型,差别主要在设备树和数据传输上,由于SPI是由4根线实现主从机的通信,在设备树上配置时需要对SPI进行设置。 原理图可知,数码管使用的SPI4对应了单片机上的PE11-->SPI4-NSS,PE12-->SPI4-S…...
linux-c 字节序问题--大小端
今天面试被问了一个网络字节系列的问题分享一下: 1.如何将Int转换成byte数组在网络上传输。 2.计算机世界里的大小端问题。 计算机世界里为什么有大小端 硬件设计因素 CPU 架构差异 不同的 CPU 架构在设计时,对于多字节数据在内存中的存储顺序…...
java医院多维度综合绩效考核源码,医院绩效管理系统,支持一键核算和批量操作,设有审核机制,允许数据修正
医院绩效考核管理系统,java医院绩效核算系统源码,采用多维度综合绩效考核的形式,针对院内实际情况分别对工作量、KPI指标、科研、教学、管理等进行全面考核。医院可结合实际需求,对考核方案中各维度进行灵活配置,对各维…...
C语言学习笔记-初阶(13)scanf介绍
当我们有了变量,我们需要给变量输入值就可以使用 scanf 函数,如果需要将变量的值输出在屏幕上的时候可以使用 printf 函数,下面看⼀个例子: #include <stdio.h> int main() {int score 0;printf("请输⼊成绩:")…...
Android MMKV集成指南
首先简单介绍一下MMKV当下Android Studio最版本及Gradle8.7 MMKV集成根据官方文档重新对mmkv重新包了一次(便于开发)总结首先简单介绍一下MMKV MMKV 是腾讯开源的一款专为移动端设计的高性能键值存储组件,旨在替代传统的 SharedPreferences 和 SQLite,尤其在频繁读写和数据…...
如何让传统制造企业从0到1实现数字化突破?
随着全球制造业不断向智能化、数字化转型,传统制造企业面临着前所未有的机遇与挑战。数字化转型不仅是技术的革新,更是管理、文化、业务流程等全方位的变革。从零开始,如何带领一家传统制造企业走向数字化突破,是许多企业领导者面…...
Centos7安装Python3.13
Centos7.5环境上安装Python3.13 # 安装依赖 yum install -y zlib zlib-devel openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c mkdir -p /opt/software cd /opt/software # openssl高版本安装 # 如果 Centos7 系统默认自带的 openssl 版本太低…...
C++之string类的模拟实现(超详细)
们学习东西,先学习如果使用它,然后再学习如何实现它 文章目录 目录 1. 命名空间以及头文件 2.string类的成员变量 3.string类的成员函数 3.1 构造函数 3.2 析构函数 3.3 拷贝构造函数 3.4 赋值运算符重载 3.5 c_str函数 3.6 size函数 3.7 clea…...
【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取
【HarmonyOS Next】鸿蒙应用公钥和证书MD5指纹的获取 一、问题背景 政府的icp备案时,或者某些三方SDK以来的管理后台,都需要配置鸿蒙应用的公钥和证书MD5指纹 二、解决方案 专有名词解释: 华为AppGallery Connect简称 AGC平台࿰…...
