MySQL-日志

Oracle redo 与 undo 阅读详情

MySQL-日志

MySQL中的日志文件,有这么两种与事务有关:undo日志与redo日志。
undo和redo: : 解决原子性、持久性
日志在内存即有缓存Log buffer,又有磁盘文件log file。
原子性(Atomicity):不全部成功,就全部恢复。
持久性**(Durability),一旦提交不可逆。
undo log 记录原始数据,用于保证事务原子性
redo log 记录修改数据,用于保证事务的持久性
redo log有自己的内存buffer,先写入到buffer,事务提交时(缓存满的时候)写入磁盘
redo log持久化之后,意味着事务是
可提交**的

Undo Log

原理:

  • 为了满足事务原子性,操作任何数据时,先将数据备份到undo_log,再进行数据的修改。如果出现了未知错误或者用户进行了ROLLBACK,db就可以利用undo_log 备份将数据恢复到事务开始之前的状态。
  • DB: 写入数据到磁盘之前,先将数据缓存到内存中,事务提交之前才会写入磁盘中

简化过程:

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

  1. 事务开始.
  2. 记录A=1到undo log.
  3. 修改A=3.
  4. 记录B=2到undo log.
  5. 修改B=4.
  6. 将undo log写到磁盘。
  7. 将数据写到磁盘。
  8. 事务提交
保证持久性:
  • 事务提交前会将修改数据写到磁盘
  • 也就是说一旦事务提交,肯定持久性
保证原子性:
  • 每次对DB修改,都会把原始数据存到undo_log中,需要回滚时,直接读取undo_log,恢复数据
  • 系统在7和8之间挂了,事务未提交,直接回滚,通过undo_log(6已持久化)
  • 系统在7之前挂了,此时数据未持久化到硬盘(内存当中),挂了之后,内存清理,依然保存之前的状态。

缺陷:

cpu
磁盘(光盘) 激光探头读取数据,寻址—》读取数据
转速 4800 5200
顺序读写
随机读写 RAM
mysql索引 随机写

  1. 每个事务提交前数据和undo_log写入磁盘,造成大量磁盘IO,性能低

如果可以将数据缓存一段时间,就能减少IO提高性能。但是这样就会丧失事务的持久性。因此引入了另外一种机制来实现持久化,即Redo Log.

Redo Log

undo 记录旧数据,redo_log 记录修改之后的数据
在内存中
== 将数据写到磁盘(异步) == 随机写 寻址浪费大量时间
redo 与数据不太一样,redo_log是一种高性能写入方式,顺序写(连续空间),减少寻址的性能问题
真实场景:undo_log(随机写)写入redo_log.降低性能瓶颈

基本原理:

Undo + Redo事务的简化过程

  1. 事务开始.
  2. 记录A=1到undo log buffer.
  3. 修改A=3.
  4. 记录A=3到redo log buffer.
  5. 记录B=2到undo log buffer.
  6. 修改B=4.
  7. 记录B=4到redo log buffer.
  8. 将undo log写入磁盘(真实场景redo_log)
  9. 将redo log写入磁盘
  10. 事务提交

保证原子性:

  • 事务提交前一步故障,通过undo_log 日志恢复
  • 如果undo_log未写入,数据尚未持久化,无需回滚

保证持久性:

  • 数据已经写入redo log,而redo log持久化到了硬盘,
  • 只要到了步骤`9以后,事务可以提交的。

内存中的DB数据持久化到磁盘:

  • redo log已经持久化,因此数据库数据写入磁盘与否影响不大,
  • 为了避免出现脏数据(内存中与磁盘不一致),事务提交后也会将内存数据刷入磁盘(也可以按照固设定的频率刷新内存数据到磁盘中)。异步

redo log会在事务提交之前,或者redo log buffer满了的时候写入磁盘

极端问题

1、undo是写undo和数据库数据到硬盘,redo_是写undo和redo到磁盘,IO次数都是两次,没有减少
  • DB数据写入是随机IO,性能很差
  • redo log在初始化时会开辟一段连续的空间,写入是顺序IO,性能很好
  • 真实场景,undo log并不是直接写入磁盘,而是先写入到redo log buffer中,当redo log持久化时,undo log就同时持久化到硬盘了。
  • 故事务提交前,只需要对redo log持久化即可。
  • redo log并不是写入一次就持久化一次,redo log在内存中也有自己的缓冲池:redo log buffer。每次写redo log都是写入到buffer,在提交时一次性持久化到磁盘,减少IO次数。
2、redo log 数据是写入内存buffer中,当buffer满或者事务提交时,将buffer数据写入磁盘。redo log中记录的数据,有可能包含尚未提交事务,如果此时数据库崩溃,那么如何完成数据恢复?
  • 数据恢复有两种策略:
    • 恢复时,只重做已经提交了的事务(redo_log 中挑undo)
    • 恢复时,重做所有事务包括未提交的事务和回滚了的事务。然后通过Undo Log回滚那些未提交的事务(先redo_log顺序执行,后面在undo_log中找,再还原)

Inodb引擎采用的是第二种方案,因此undo log要在 redo log前持久化

【MySQL】MySQL日志的开启及查看 MySQL日志 阅读详情

相关推荐

VS Code/TRAE集成Cppcheck并启用MISRA规则

本文探讨了嵌入式开发中Cppcheck工具集成与MISRA规则检查的必要性。详细介绍了安装配置步骤:安装VSCode/TRAE、Cppcheck软件、配置插件参数、安装Python环境,并重点说明了MISRA规则文件的设置方法。通过完整的配置流程,实现了嵌入式开发环境下静态检查与安全标准的落地。

SDFangFang2025的博客 1282

MySQL-redo和undo

在数据库系统中,既有存放数据的文件,也有存放日志的文件。日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件。 ​ MySQL中的日志文件,有这么两类常常讨论到:undo日志与redo日志。 1 undo 1.1 undo是啥 undo日志用于存放数据修改被修改前的值,假设修改 tba 表中 id=2的行数据,把Name=’B’ 修改为Nam...

qq_42709262的博客 1433

H3C交换机S-MLAG实战:如何用bond4模式实现服务器高可用(附避坑指南)

本文详细介绍了H3C交换机S-MLAG技术与服务器bond4模式的实战配置,帮助实现跨设备链路聚合的服务器高可用方案。通过解析S-MLAG技术优势、bond4模式选择、关键配置步骤及常见问题排查,提供了一套完整的避坑指南和优化建议,适用于企业级网络架构的高可用需求。

weixin_30790841的博客 466

数据库的redo undo 思考总结

概述 redo日志 记录某数据块被修改后的值,可以用来恢复未写入data file 的已成功事物更新的数据 undo日志 记录某数据被修改前的值,可以在事物失败时进行rollback; 解释: 两种流程,redo重做流程,undo撤销还原流程;或则是redo日志与undo段的简称 redo即重做,undo即撤销还原。 1. redo记录了什么: redo即redo日志,记录数据库变化的日志(区别我们常见的简单的文本日志,redo日志里面记录的都是数据啊,表数据啊等等压缩处理,但也很大)。 只要你修改了数据块

庆辉的博客 2308

中兴问天 BE7200MAX SFP 光口用华为猫棒替代光猫完整配置教程

PPPoE 账号密码:若原光猫为 Route 模式,在宽带设置页可见用户名,密码需按 F12 打开浏览器开发者模式,点击密码输入框,查看代码中 “value=” 后的内容即为明文密码。若仍失败,核对 PON 类型是否与运营商网络匹配。PON 认证信息:LOID(逻辑 ID,部分地区含密码)、设备 SN 码(标签或设备信息页)、PON 类型(GPON/EPON,运营商网络类型)。电脑保持与路由器连接,访问路由器管理地址(默认通常为 192.168.5.1,可参考路由器说明书),登录后台。

Gulper_Eel的博客 3359

Scratch(四十一):升级版垃圾分类

哈喽,大家好!之前给大家展示过“Scratch(二十四):垃圾分类”。今天呢,给大家展示的Scratch是`升级版垃圾分类`。接下来,我们一起看一下效果吧。

我可以很大侠的博客 6871

关于undo和redo日志的区别

一、undo和redo日志的区别 undo:撤销,也就是取消之前的操作 redo:重做,重新执行一遍之前的操作 二、什么是redo redo记录transaction logs,分为online和archived,以恢复为目的。 比如,机器停电,那么在重启之后需要online redo logs去恢复系统到失败点。 比如,磁盘坏了,需要用archived redo logs 和 online redo logs 去恢复数据。 比如,truncate一个表或其他的操作,想恢复到之前的状态,同样X`

Disfigureds的博客 1万+

一分钟学会MATLAB-数据清洗(含完整代码)

数据清洗是数据分析过程中的一个重要步骤,目的是提高数据的质量,以便进行更有效的分析。% 删除超出阈值的行。% 用线性插值填充缺失值。% 删除包含缺失值的行。% 找到缺失值的位置。% 可视化数据,识别异常值。缺失值是数据清洗中常见的问题。通过以上步骤,你可以有效地清洗数据,使其准备好进行后续的分析和建模。

2402_87132195的博客 3316

【答疑解惑】图文深入详解undo和redo的区别及其底层逻辑

最近有些人问我,undo和redo到底是什么关系,他们中不乏已经入行3-4年的同学,今天咱们就来深入探讨下到底什么是undo和redo,他们分别做什么,底层逻辑原理是什么等等。

qq_45732829的博客 4231

C/C++小宇宙代码(完整代码)

C语言实现小宇宙的完整代码。

AIGC 2525

从0到1打造一台机器人走起来

1)本体机械结构设计,依据人体生物学和生物力学知识,结合机器人运动时各关节扭矩需求,进行合理选用电机,比如胯部需要大扭矩,腿部惯量小等2)硬件拓扑上,分层架构的信号层和功率协同工作,高带宽,低延时,硬实时3)步态规划设计与验证环节实机回溯和部署过程:Real2Sim,Sim2Sim,Sim2Real。

weixin_43163941的博客 244

mysql 日志

慢查询日志主要用来记录查询时间较长的日志。在开发环境下,可以开启慢查询日志来记录查询时间较长的查询语句,然后对这些语句进行优化。通过配置long_query_time的值,可以灵活地掌握不同程度的慢查询语句

一路向前 3359

本地快速部署谷歌开放模型Gemma教程(基于Ollama)

谷歌最近发布了新一代开源AI模型Gemma,此次发布的 Gemma 相比自家的 Gemini 更加轻量级,模型权重也一并开源。不仅可以在笔记本电脑上运行,而且还免费可商用,支持中文。运行速度飞快。

特立独行的博客 6718

MySQL日志

日志分类1.错误日志①作用:记录MySQL服务器启动、运行、关闭过程中的关键事件,包括:服务启动/关闭的详细信息严重错误(如权限不足、内存溢出、表损坏)警告信息(如配置参数不推荐使用)②配置方法错误日志默认强制开启,无需手动启用,仅需配置存储路径。

2502_92656182的博客 1428

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

mysql里面的日志

一、日志类型 MySQL 中有七种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。 二、日志作用 1.二进制日志(binlog) binlog 主要有以下作用: 复制:MySQL 主从复制在 Master 端开启 binlog,Master 把它的二进制日志传递给 slaves 并回放来达到 master-

pengchenxin的博客 8806

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

MySQL的日志总结

前言 MySQL中有以下日志文件,分别是:   1:重做日志(redo log)   2:回滚日志(undo log)   3:二进制日志(binlog)   4:错误日志(errorlog)   5:慢查询日志(slow query log)   6:一般查询日志(general log)   7:中继日志(relay log)。 其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。 一、重做日志(red

红鱼儿的博客 2614

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【MySQL高级】MySQL的日志

二进制日志(BINLOG)记录了所有的 DDL(数据定义语言)语句和 DML(数据操纵语言)语句,但是不包括数据查询语句。此日志对于灾难时的数据恢复起着极其重要的作用,MySQL的主从 , 就是通过该binlog实现的。二进制日志,MySQl8.0默认已经开启,低版本的MySQL的需要通过配置文件开启,并配置MySQL日志的格式。Windows系统:my.ini Linux系统:my.cnf。

dzqxwzoe的博客 2421

MySQL的日志

慢日志主要是用于以文本形式记录数据库服务运行过程中,执行过程较慢的语句;利用慢日志信息生成的信息,可以在日常巡检过程中,通过日志定位SQL语句性能问题;:0关闭,1开启:义慢查询日志存储路径以及名称信息:查询耗时超时设置:没有走索引的语句会记录到慢查询日志中;0关闭,1开启。

qq_73797346的博客 1941

【MySQL】日志

MySQL日志学习

gma999的博客 1116

【MySQL】日志详解

本文使用的MySQL版本是8。介绍了MySQL常见的日志。

p_fly的博客 1331

【MySQL】常见的MySQL日志都有什么用?

MySQL日志的内容非常重要,面试中经常会被问到。同时,掌握日志相关的知识也有利于我们理解MySQL 底层原理,必要时帮助我们排查解决问题。主要介绍了二进制i日志、慢查询日志、重做日志、撤销日志

关关的博客 2122

MySQL七种日志总结

mysql日志

myroncham的博客 5393

MySQL——MySQL 日志

参数文件(my.cnf / my.ini):MySQL的配置文件,包含服务器参数设置,如内存分配、连接数、字符集等;该文件通常在MySQL启动时读取;socket文件(.sock):用于进程间通信,允许客户端和MySQL服务器通过Unix套接字连接;TCP/IP 连接是通过网络协议进行的,适用于远程连接到MySQL服务器。这种方式用于客户端和MySQL服务器在不同的物理主机上时的连接。支持跨网络连接,可用于互联网或本地网络。

longool的博客 1204

MySQL日志详解

错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。

一起努力共同进步,为了未来一起奋斗吧! 2031
上一篇: git-02
下一篇: 分布式事务
ADCQprogrammer
博客等级 码龄7年 4粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值