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日志 阅读详情

相关推荐

使用Python下载ECMWF的ERA-5数据

一、注册账号 [官网]https://www.ecmwf.int/ 二、登录后获取下载key https://cds.climate.copernicus.eu/api-how-to 如图右侧红色框中的内容复制保存为TXT文件,并重命名为“.cdsapirc”,注意前面有点,保存在 C:\Users\username\.cdsapirc,(WINDOWS系统),username指当前电脑登录账户。 三、安装cdsapi库 以pycharm为例: 在pycharm中依次打开:File>setting

wise_sun的博客 7706

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

【扫地机器人测试】

本测试方案旨在系统性评估扫地机器人的核心功能、性能指标、可靠性及用户体验,验证产品是否符合设计规范、行业标准及市场需求。通过多维度、全场景的测试,精准定位产品缺陷与优化空间,为产品迭代提供数据支撑,确保上市产品的质量稳定性与用户满意度。

xuhuaiyaun的博客 1375

数据库的redo undo 思考总结

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

庆辉的博客 2307

高项49个过程,输入、工具技术、输出的思维导图

为了制定项目章程的管理方法主要是采用了数据收集技术,例如通过头脑风暴,通过召集主题专家和团队成员收集信息、解决方案,并在短时间内获得大量创意,并对大量创意进行分析和排序,选出最优化最适合本项目方案,并对项目成员的不同差异观点,进行了引导和对冲突的管理,最终有助于项目干系人的目标、成功标准的内容达成一致意见,形成完善的项目章程。在本过程中得到项目章程,在制定项目章程中需要包括信息有:项目名称、项目目标、项目总里程碑进度表、项目经理、主要干系人及财务预算信息。本过程在仅开展一次,或仅在项目的预定义点开展。

Legend_Jiang的博客 6185

深入浅出ISP:用RKISP2.x Tuner工具理解AWB、AE、HDR等核心模块的实战调参

本文深入解析RKISP2.x Tuner工具在ISP图像处理中的实战应用,重点探讨AWB、AE、HDR等核心模块的调参技巧。通过环境搭建、调试工具使用和实际案例,帮助开发者掌握如何在不同光照条件下优化图像质量,实现精准的白平衡、曝光控制和动态范围处理。

weixin_26802933的博客 489

关于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万+

ELK - CentOS7 安装 elasticsearch 7.17.5

elk elasticsearch 安装

qq_19783793的博客 1462

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

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

qq_45732829的博客 4231

有限元缺陷:剪切锁死

有限元缺陷:剪切锁死

wsxww11的博客 5191

Simulink/Requirements Toolbox 学习(一):概述

编写、导入、导出需求并使需求正式化;两种创建需求的模块:需求编辑器、需求透视;描述需求的方式:文本、图像和关键字;通过导入和导出需求文件,与第三方需求管理工具(例如 Microsoft Word、Microsoft Excel®、IBM DOORS和 IBM DOORS Next)集成。涉及模块:Requirements Eidtor、Requirements Table等;

860

mysql 日志

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

一路向前 3359

[Dify实战] OA 公文排版助手:自动格式化、编号、生成摘要-带配套资源

摘要: Dify 公文排版助手通过自动化解决公文处理中的格式混乱、编号错漏等问题。支持标题层级自动编号、摘要生成、要素补全等功能,输出标准化Markdown格式。核心流程包括输入原文、智能识别、自动排版与要素输出,适用于通知、纪要等场景。实施需统一模板规则,规范输入格式,并通过试跑优化纠错率与处理效率。关键价值在于减少人工返工,提升排版一致性,未来可对接OA系统实现全流程自动化。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 474

MySQL日志

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

2502_92656182的博客 1428

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【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、付费专栏及课程。

余额充值