mysql面试题——日志

一:为什么需要REDO日志

  1. 缓冲池可以帮助我们消除CPU和磁盘之间的鸿沟,checkpoint机制可以保证数据的最终落盘,然而由于checkpoint 并不是每次变更的时候就触发 的,而是master线程隔一段时间去处理的。所以最坏的情况就是事务提交后,刚写完缓冲池,数据库宕机了,那么这段数据就是丢失的,无法恢复。
  2. 事务包含持久性的特性,就是说对于一个已经提交的事务,在事务提交后即使系统发生了崩溃,这个事务对数据库中所做的更改也不能丢失。
    解决思路:先写日志,再写磁盘,只有日志写入成功,才算事务提交成功,这里的日志就是rodo日志

二:什么是REDO日志

Redo Log是MySQL用于实现崩溃恢复和数据持久性的一种机制。在事务进行过程中,MySQL会将事务做了什么改动记录到Redo Log中。当系统崩溃或者发生异常情况时,MySQL会利用Redo Log中的记录信息来进行恢复操作,将事务所做的修改持久化到磁盘中。

三:redo的组成

  1. 重做日志的缓冲 (redo log buffer) ,保存在内存中,是易失的
  2. 重做日志文件 (redo log file) ,保存在硬盘中,是持久的

四:redo的整体流程

  1. 先将原始数据从磁盘中读入内存中来,修改数据的内存拷贝
  2. 生成一条重做日志并写入redo log buffer,记录的是数据被修改后的值
  3. 当事务commit时,将redo log buffer中的内容刷新到 redo log file,对 redo log file采用追加
    写的方式
  4. 定期将内存中修改的数据刷新到磁盘中
    在这里插入图片描述

五:redo log的刷盘策略

redo log的写入并不是直接写入磁盘的,InnoDB引擎会在写redo log的时候先写redo log buffer,之后以一定的频率刷入到真正的redo log file 中。这里的一定频率怎么看待呢?这就是我们要说的刷盘策略。
在这里插入图片描述
注意,redo log buffer刷盘到redo log file的过程并不是真正的刷到磁盘中去,只是刷入到 文件系统缓存中去,真正的写入会交给系统自己来决定。那么对于InnoDB来说就存在一个问题,如果交给系统来同步,同样如果系统宕机,那么数据也丢失了。
针对这种情况,InnoDB提供了一个参数,该参数控制 commit提交事务时,如何将 redo log buffer 中的日志刷新到 redo log

  1. 设置为0 :表示每次事务提交时不进行刷盘操作。(系统默认master thread每隔1s进行一次重做日志的同步)
  2. 设置为1 :表示每次事务提交时都将进行同步,刷盘操作( 默认值 )
  3. 设置为2 :表示每次事务提交时都只把 redo log buffer 内容写入 page cache,不进行同步。由os自己决定什么时候同步到磁盘文件。

六:什么是Undo Log日志

Undo Log是事务原子性的保证,在事务中更新数据的前置操作其实是要先写入一个 undo log。如果事务需要回滚,则会从Undo Log中找到相应的记录来撤销事务所做的修改。另外,Undo Log还支持MVCC(多版本并发控制)机制,用于在并发事务执行时提供一定的隔离性。

七:undo log的生命周期

假设有2个数值,分别为A=1和B=2,然后将A修改为3,B修改为4

1. start transaction;
2.记录 A=1 到undo log;
3. update A = 3;
4.记录 A=3 到redo log;
5.记录 B=2 到undo log;
6. update B = 4;
7.记录B = 4 到redo log;
8.将redo log刷新到磁盘
9. commit

在1-8步骤的任意一步系统宕机,事务未提交,该事务就不会对磁盘上的数据做任何影响。
如果在8-9之间宕机,恢复之后可以选择回滚,也可以选择继续完成事务提交,因为此时redo log已经持久化。
若在9之后系统宕机,内存映射中变更的数据还来不及刷回磁盘,那么系统恢复之后,可以根据redo log把数

八:什么是binlog日志?

binlog是MySQL用于记录数据库中的所有DDL语句和DML语句的一种二进制日志。它记录了所有对数据库结构和数据的修改操作,如INSERT、UPDATE和DELETE等。binlog主要用来对数据库进行数据备份和数据复制、灾难恢复等操作。

九:查看binlog日志

mysql> show binlog events [IN ‘log_name’] [FROM pos] [LIMIT [offset,] row_count];

IN 'log_name' :指定要查询的binlog文件名(不指定就是第一个binlog文件) 
FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT [offset] :偏移量(不指定就是0)
row_count :查询总条数(不指定就是所有行)

mysql> show binlog events in ‘atguigu-bin.000002’;

十:使用binlog日志恢复数据

mysqlbinlog恢复数据的语法如下:

mysqlbinlog [option] filename|mysql –uuser -ppass;

这个命令可以这样理解:使用mysqlbinlog命令来读取filename中的内容,然后使用mysql命令将这些内容恢复到数据库中。

filename :是日志文件名。
option :可选项,比较重要的两对option参数是--start-date、--stop-date 和 --start-position、--
stop-position。
--start-date 和 --stop-date :可以指定恢复数据库的起始时间点和结束时间点。
--start-position和--stop-position :可以指定恢复数据的开始位置和结束位置

面试题:

1. redolog和undolog区别?
(1)redo log:记录的是"物理级别"上的页修改操作,比如页号xx、偏移量yyy,写了’zzz’数据
undo log:记录的是逻辑操作,比如对某一行数据进行了INSERT语句操作,那么 undo log就记录一条与之相反的DELETE操作
(2)redo log:目的是为了保证事务的持久性,主要用于崩溃恢复
undo log:目的是为了保证事务的原子性和一致性,主要用于事务回滚

2. binlog、redolog和undolog区别?
(1)redo log和undo log主要用于事务管理,redolog用来做恢复,undolog用来做回滚
binlog主要用来对数据库进行数据备份和数据复制、崩溃恢复等操作
(2)redo log和undo log在存储引擎层产生的,而binlog则是数据库层产生的

3. MySQL的binlog有几种格式?
binlog的格式分为基于语句的格式和基于行的格式。MySQL的bin log主要支持三种格式,分别是statement、row以及mixed
(1)statement:binlog 里面记录的就是 SQL 语句的原文,也就是数据库中执行的SQL会原封不动的记录到binlog中。
缺点:会导致主从同步的数据不一致问题。比如说,当我们使用DELETE或者UPDATE的时候,指定了LIMIT,但是并没有使用order by,那么最终这条语句在主库和从库上的执行结果可能是不一样的
(2)row:不记录每条sql语句的上下文信息,仅记录哪条数据被修改了,修改成什么样了。
缺点:可能会要记录更多的内容,所以,带来的问题就是基于这种格式的binlog,在数据恢复的时候,会需要更长的时间,也会导致磁盘IO和网络IO都比较高
(3)mixed:实际上就是Statement与Row的结合

4. 什么是事务的2阶段提交?
所谓事务的2阶段提交,其实是在更新过程中,保证binlog和redolog—致性的一种手段,他的过程是:
(1)Prepare 阶段:这个阶段 SQL 已经成功执行并生成 redolog,处于prepare阶段
(2)BinLog持久化:binlog 提交,通过 write()将 binlog 内存日志数据写入文件缓冲区,通过 sync()将 binlog 从文件缓冲区永久写入磁盘;
(3) Commit:在执行引擎内部执行事务操作,更新redolog,处于Commit阶段。

例子:假设先写入redo log 成功,但是没来得及写入bin log ,系统崩了。在MySQL重启后,可以根据redolog把记录更新成功,但是binlog由于没写成功,也就意味着,主备同步的时候,是缺了一条SQL的,导致主备库之间数据不一致,所以引入二阶段提交。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GLAB | CCNA+HCIA=融合课-最新开课通知

敲重点! 12月17日 CCNAHCIA 周日开课啦! CCNA(Cisco Certified Network Associate)认证是Cisco售后工程师认证体系的入门认证,也是Cisco各项认证中级别最低的技术认证通过CCNA认证可证明你已掌握网络的基本知识,并能…

DL Homework 9

目录 1 知识总结 1.1 给网络增加短期的记忆能力 1.2 有外部输入的非线性自回归模型 1.3 循环神经网络 2.1 简单循环神经网络 2.1.1 循环神经网络的通用近似定理 2.1.2 图灵完备 3.1 序列到类别 3.2 同步的序列到序列模式 3.3 异步的序列到序列模式 2.Homework 1. 实现SRN &am…

JavaScript <关于逆向RSA非对称加密算法的案例(附原代码)>--案例(五)

前言: 趁热打铁,标记一下RSA的算法逆向...第二篇会有详解(本篇重在过程) 正文: 废话不说,直接分析步骤图: 到了这里,可以看到在登录的时候,需要验证码(本篇不教反验证码) 下面是正题--->逆他的pwd(密码) 总结: 问题:怎么确定一个密文数据是基于什么算法做出来的呢? 答:…

【MYSQL】单表查询

查询语法: select 字段(*表示全字段) from 数据表 【where 条件表达式】 【group by 分组字段【having 分组条件表达式】】 【order by 排序字段【asc | desc】】 例子: 教职工表Teacher(Tno, TName, age, sal, mgr, DNo)&#…

智能优化算法应用:基于多元宇宙算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于多元宇宙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于多元宇宙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.多元宇宙算法4.实验参数设定5.算法结果6.…

匿名内部类 - ( 零基础学java )

Java-匿名内部类 我们先分析匿名内部类的结构,然后逐一解释,最后以下罗列的问题都会在下面的内容中一一得到解答 : 匿名内部类到底是什么? 我们为什么要学习匿名内部类 ? 匿名内部类都有怎样的作用 ? 匿名内部类应用的场景又有哪些 ? 匿名内部类是否有缺陷? 让我们…

基于SSM的教师上课系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

基于以太坊的智能合约开发Solidity(基础篇)

参考教程:基于以太坊的智能合约开发教程【Solidity】_哔哩哔哩_bilibili 1、第一个程序——Helloworld: //声明版本号(程序中的版本号要和编译器版本号一致) pragma solidity ^0.5.17; //合约 contract HelloWorld {//合约属性变…

一些AG10K FPGA 调试的建议-Douglas

PLL AGM FPGA 在配置成功时,PLL 已经完成锁定,lock 信号已经变高;如果原设计中用 lock 信号输出实现系统 reset 的复位功能,就不能正确完成上电复位;同时,为了保证 PLL 相移的稳定,我们需要在 P…

项目文章(ChIP-seq)|Plant Physiol组蛋白H3K4甲基转移酶DcATX1促进乙烯诱导康乃馨花瓣衰老

发表单位:华中农业大学 期 刊 :Plant Physiology(IF:7.4) 发表日期:2023年5月2日 2023年5月2日华中农业大学的张帆教授研究团队在期刊Plant Physiology(IF:7.4)发表了题为“Histone H3K…

【软考】信息系统项目管理师论文方向猜想

报喜不报忧,每天都在为鸡零狗碎推诿扯皮,属实是有辱师门。 通过软考,目前算是真正有意义的事情。 虽然都说高项的论文是个玄学,但是道听途说了一些通关感想还是蛮有启发的。 文件要求 参考了一份广西省高级工程师评审的文件&am…

磁学单位SI制和CGS制的转换

电磁学领域中除了使用一般的SI国际制单位外,还会使用CGS高斯制单位,这对于接触磁性材料的朋友们来说,有时就需要做单位的转换,而这两种单位制的转换计算非常复杂。为了方便大家使用,我们系统地总结了一下电磁学中的单位…

python用turtle画樱花飘落,python代码画樱花代码

这篇文章主要介绍了python用turtle画樱花飘落,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 1、python画樱花树代码为: import turtle as T import random import…

洲际酒店集团内外并举 引领行业多元包容文化发展

携手多家本地合作伙伴聚焦女性职业发展和残障群体关爱 2023年12月8日,上海 — 近年来,随着“中国式现代化”进程的不断推进,建立多元、包容的雇佣环境,促进公平就业机会等愈加受到社会各界的重视。洲际酒店集团深知,“…

ssm基于JAVA的网上药品售卖系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本网上药品售卖系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

从零开始搭建企业管理系统(四):集成 Knife4j

集成 Knife4j 前言Knife4j是什么集成 Knife4j引入 pom 依赖添加基础配置启动程序测试完善文档信息编写配置类修改 UserController修改 UserEntity修改 BaseEntity 文档效果图swagger 界面knife4j 界面 前言 前面一小节我们使用postman来进行接口的调试,如果接口一多…

大数据机器学习算法项目——基于Django/协同过滤算法的房源可视化分析推荐系统的设计与实现

大数据机器学习算法项目——基于Django/协同过滤算法的房源可视化分析推荐系统的设计与实现 技术栈:大数据爬虫/机器学习学习算法/数据分析与挖掘/大数据可视化/Django框架/Mysql数据库 本项目基于 Django框架开发的房屋可视化分析推荐系统。这个系统结合了大数据…

Java项目-瑞吉外卖Day3

填充公共字段: 目的:由于某些属性,例如createdTime这些需要填充的字段会在多个地方出现,所以考虑使用公共字段自动填充的办法减少重复代码。 在对应属性上加入TableField注解。通过fill字段表明策略,是插入/更新的时候…

5个免费AI文案生成器【2024】

随着科技的不断进步,人工智能在各行各业中崭露头角,其中,AI文案生成器的出现在内容创作领域引起了翻天覆地的变化。在这个信息快速传递的时代,如何更高效地进行文案创作成为许多从业者关注的焦点。本文将深入探讨AI文案生成器&…

每日一博 - 图解5种Cache策略

文章目录 概述读策略Cache AsideRead Through 写策略Write ThroughWrite AroundWrite Back 使用场景举例 概述 缓存是在系统中存储数据的临时存储器,用于提高访问速度。缓存策略定义了如何在缓存和主存之间管理数据 读策略 Read data from the system: &#x1f5…