Mysql 日志(redolog, binlog, undoLog)

重做日志-redolog

是什么

innoDB存储引擎层面的日志,它的作用是当 数据更新过程中数据库发生异常导致提交的记录丢失

为什么

mysql的基本存储结构是页(记录都在页里面),所以更新语句时,mysql需要先把要更新的语句找到,加载进内存(buffer pool),再修改对应的记录,再写会磁盘

此时就会面临问题:

1、如果内存中的数据更新了,但是未落入磁盘,mysql挂了怎么办?

2、每个请求都需要将数据立马落入磁盘,速度会很慢,mysql可能会顶不住

因此 Innodb引入了redolog

怎么做,实现原理


 

redolog也是需要写入磁盘的,但它是顺序写入的,顺序io比随机io快很多

目的:当我们修改了数据,写完内存了,可能还未落入磁盘,数据库挂掉了,此时可以根据redo log来恢复数据。redo log是顺序io,所以写入速度很快,记录的是物理变化(xx页做了xx修改),文件体积小,所以恢复速度也快
 

  • 内容:记录的是物理数据页面的修改信息(xx页做了xx修改),其redo log是顺序写入redo log fail的物理文件中去的
  • 介绍一下:redolog又叫重做日志,是存储引擎层面的日志(innoDb特有的日志),用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来
  • 日志大小是固定的,即写满了之后会从头开始循环写
  • Innodb_log_file_size=100M(指定大小);Innodb_log_files_in_group=5(指定个数)
     

归档日志-binlog

binlog(归档日志):是mysql server层面的日志,属于逻辑日志,是以二进制形式记录的,记录的是这个语句的原始逻辑(每条变更的sql语句),追加写的方式,即一份日志文件写到一定大小的时候会更换下一个文件,不会覆盖。

  • 用于复制,在主从复制中,从库利用主库上的binlog进行传播,实现主从同步
  • 用于数据库基于时间点的还原

回滚日志-undolog

undo log:在数据的修改过程中,会记录一条与当前操作相反的逻辑到undo log中,如果因为某些原因导致事务异常失败了,可以借助undo log进行回滚,保证事务的完整性

  • 提供了回滚的作用,保证事务的原子性
  • mvcc的实现


 

redolog 和bin log的区别

bin log

redo log

实现层面

mysql server层实现的

innoDB存储引擎层面的

记录内容

记录的是逻辑日志(sql语句)

记录的是物理日志(xx页做了xx修改)

写入方式

追加写入,一个文件写完可以换一个文件接着写

循环写,空间大小固定,会覆盖

作用

用于主从复制,恢复数据

持久化

提交实际

事务提交时记录

事务开始时记录每次的变更信息

redolog是如何保证crash-safe的?

crash-safe是通过redo log的write ops和checkpoint机制来保证的

WAL(write ahead log)日志先行技术:先写日志,再写磁盘。对于数据更新操作,先写入redo log

redo log有两个关键的指针:write ops和checkpoint。write ops是当前记录的位置,一边写一边后移,无法移动的时候就回到开头。checkpoint是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把数据更新到数据文件。write ops和checkpoint之间还空着的地方,可以用来记录新的操作,如果write ops追上了checkpoint,此时不能进行新的更新操作,需要停下来先擦除一部分内容
 

redolog 能保证crash-safe,还需要bin log吗?

看场景

  • 主从模式下,binlog是需要的,因为从库同步主库的数据依赖于bin log
  • 单机模式下,如果不考虑基于某个时间点数据的还原,可以不需要bin log。但是万一需要恢复某个时间点的数据,是做不到的,所以建议一直开启bin log

简言之,red log只有innodb有,别的存储引擎没有。redo log是循环写的,不持久保存,所以还是需要binlog。


 


 


 


 

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

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

相关文章

Softing工业推出的edgeConnector将Allen-Bradley控制器集成到工业边缘应用中

2024年4月17日(哈尔),Softing宣布扩展其基于Docker的edgeConnector产品系列,推出了新软件模块edgeConnector Allen Bradley PLC,可方便用户访问来自ControlLogix和CompactLogix控制器数据。 (edgeConnector…

Linux提权--定时任务--打包配合 SUID(本地)文件权限配置不当(WEB+本地)

免责声明:本文仅做技术交流与学习... 目录 定时任务 打包配合 SUID-本地 原理: 背景: 操作演示: 分析: 实战发现: 定时任务 文件权限配置不当-WEB&本地 操作演示: 定时任务 打包配合 SUID-本地 原理: 提权通过获取计划任务执行文件信息进行提权 . 1、相对路径和…

在vue3中,如何优雅的使用echarts之实现大屏项目

前置知识 效果图 使用技术 Vue3 Echarts Gasp Gasp:是一个 JavaScript动画库,它支持快速开发高性能的 Web 动画。在本项目中,主要是用于做轨迹运动 所需安装的插件 npm i echarts npm i countup.js 数字滚动特效 npm i gsap javascript动画库 np…

宝塔面板怎么解决nginx跨域问题

1.找到宝塔的nginx配置文件 宝塔有一点不同,nginx配置文件不在nginx的安装目录中,应当去/www/server/panel/vhost/nginx找到 2.添加你要跨域的地址 location /api {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-…

维护祖传项目Tomcat部署war包

文章目录 1. 安装tomcat2. 解决Tomcat启动日志乱码3. idea配置启动war包 1. 安装tomcat 选择免安装版本,只需要在系统变量里面配置一下。 新增系统变量 CATALINA_HOME D:\Users\common\tomcat\apache-tomcat-8.5.97-windows-x64\apache-tomcat-8.5.97 编辑追加Path…

FPGA SDRAM读写控制器

感谢邓堪文大佬 ! SDRAM 同步动态随机存取内存(synchronousdynamic randon-access menory,简称SDRAM)是有一个同步接口的动态随机存取内存(DRAM)。通常DRAM是有一个异步接口的,这样它可以随时响…

Node.js基础:从入门到实战

初识 Node.js 与内置模块 (初识) 1、知道什么是node.js 2、知道node.js可以做什么 3、node.js 中js的组成部分 (内置模块) 4、用 fs 模块读写操作文件 5、使用 path 模块处理路径 6、使用http 模块写一个基本的web服务器 初识 N…

设计模式——模板设计模式(Template Method)

模板设计-base 什么是模板? 举个简单的例子,以AABB的格式,写出一个词语,你可能会想到,明明白白,干干净净等, 这个AABB就是一个模板,对模板心中有了一个清晰的概念之后,…

环境变量(全)

概念 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执…

今日arXiv最热NLP大模型论文:揭露大语言模型短板,北京大学提出事件推理测试基准

人工智能领域又一里程碑时刻!北京大学、北京智源人工智能研究院等机构联合推出大型事件推理评测基准 。这是首个同时在知识和推理层面全面评估大模型事件推理能力的数据集。 总所周知,事件推理需要丰富的事件知识和强大的推理能力,涉及多种推…

consul启动Error_server_rejoin_age_max (168h0m0s) - consider wiping your data dir

consul 启动报错: consul[11880]: 2024-05-12T08:37:51.095-0400 [ERROR] agent: startup error: error"refusing to rejoin cluster because server has been offline for more than the configured server_rejoin_age_max (168h0m0s) - consider wiping you…

【GD32】02-ADC模拟数字转换器

ADC 在电子和通信技术中,ADC(模拟数字转换器)是一种将模拟信号转换为数字信号的电子设备。这种转换是电子系统中非常关键的一个环节,因为数字信号更易于处理、存储和传输。ADC的工作原理通常包括采样、保持、量化和编码等步骤。采…

http协议 tomcat如何访问资源 servlet理论介绍

tomcat介绍 bin是启动命令; conf是配置,可以修改端口号; lib是依赖的jar包; logs是日志 webapps是重点,在这里新建我们自己的javaWeb项目 tomcat如何访问资源 tomcat通过统一资源定位符(URL)来…

乡村振兴与农村基础设施建设:加大农村基础设施建设投入,提升农村公共服务水平,改善农民生产生活条件,构建宜居宜业的美丽乡村

一、引言 乡村振兴是我国现代化进程中的重要战略,而农村基础设施建设则是乡村振兴的基石。随着城市化进程的加快,农村基础设施建设滞后的问题日益凸显,成为制约乡村发展的瓶颈。因此,加大农村基础设施建设投入,提升农…

AI大模型探索之路-训练篇21:Llama2微调实战-LoRA技术微调步骤详解

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

华为OD机试 - 执行任务赚积分 - 动态规划(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷+C卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。 一、题目描述 现有 N 个任…

Gradle基础学习(六) 认识任务Task

理解Gradle中的任务 Gradle的构建过程基于任务(Task)的概念,而每个任务都可以包含一个或多个动作(Action)。 任务是构建中执行的一些独立的工作单元,例如编译类、创建JAR、生成Javadoc或将存档发布到仓库…

4.5网安学习第四阶段第五周回顾(个人学习记录使用)

本周重点 ①部署域环境(Win2008) ②域组策略 ③域内信息收集 ④(重点)哈希传递攻击PTH ⑤MS14-068 提权漏洞 ⑥黄金票据伪造 ⑦白银票据伪造 ⑧ZeroLogon (CVE-2020-1472) 漏洞复现 本周主要内容 ①部署域环境(Win2008)…

【算法】滑动窗口——串联所有单词的子串

今天来以“滑动窗口”的思想来详解一道比较困难的题目——串联所有单词的子串,有需要借鉴即可。 目录 1.题目2.下面是示例代码3.总结 1.题目 题目链接:LINK 这道题如果把每个字符串看成一个字母,就是另外一道中等难度的题目,即&…

不同路径| 和 不同路径||

不同路径| 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径&#xf…