MySQL面试题-日志

news2025/8/2 21:26:11

目录

1.MySQL 中常见的日志有哪些?

2.慢查询日志有什么用?

3.binlog 主要记录了什么?

4.Mysql的binlog有几种录入格式?分别有什么区别?

5.redo log 如何保证事务的持久性?

6.页修改之后为什么不直接刷盘呢?

7.binlog 和 redolog 有什么区别?

8.怎样让数据库恢复到半个月内任意一秒的状态?

9.redo log和binglog如何保证两份日志之间的逻辑一致

10.undo log 如何保证事务的原子性?


1.MySQL 中常见的日志有哪些?

  1. redo log:重做日志,用于恢复数据,保证 MySQL 异常宕机后数据的完整性,只记录物理日志(日志记录了对数据页的修改,而不是逻辑修改),循环写,因为不需要回滚,所以可以覆盖写。

  2. undo log:撤销日志,用于回滚事务,可以保证事务的原子性、一致性和隔离性。记录逻辑日志,循环写,记录事务操作之前的值,便于回滚事务。

  3. binlog:二进制日志,记录所有修改数据库的操作,包括增、删、改等操作,用于数据恢复、数据复制等场景。

  4. error log:错误日志,记录 MySQL 引擎在运行过程中出现的错误、警告等信息,用于排查问题。

  5. slow query log:慢查询日志,记录执行时间超过阈值的 SQL 语句,用于性能调优、查询优化等场景。

  6. general log:通用日志,记录所有客户端的查询和状态变更信息,包括查询、连接、断开等操作,通常用于诊断问题和安全审计。

  7. relay log:中继日志,用于 MySQL 主从复制中的数据传输,从 MySQL 主节点复制数据到从节点。

2.慢查询日志有什么用?

慢查询日志是 MySQL 中用于记录执行时间超过阈值的 SQL 语句的日志,通常用于分析性能问题。它可以记录每条执行时间超过指定阈值的 SQL 语句,并记录下执行时间、访问的表、使用的索引以及执行 SQL 的用户等信息,从而帮助开发人员找到慢查询的原因和优化方案。

慢查询日志可以帮助开发人员识别哪些 SQL 语句执行时间长,从而可以进行针对性的优化。优化的方法包括但不限于优化查询语句的写法、增加索引、分离大表等。通过分析慢查询日志可以让开发人员更加深入地了解系统的瓶颈和性能问题,从而制定更好的优化策略。

慢查询日志的开启和关闭可以通过在 MySQL 配置文件中设置参数 slow_query_loglong_query_time 来实现。其中,slow_query_log 参数用于开启或关闭慢查询日志功能,long_query_time 参数用于设置执行时间超过多少秒的 SQL 语句会被记录到慢查询日志中。

3.binlog 主要记录了什么?

binlog(二进制日志)是 MySQL 的一种日志文件,它记录了所有对数据的修改操作,包括数据库的增删改等操作。它是 MySQL 的一个重要特性,也是实现数据复制、数据恢复和数据安全的基础。

binlog 主要记录以下几类信息:

        1.数据库的增删改操作

        binlog 记录了所有对数据库的增删改操作,包括对表结构的修改。在每次写入操作时,MySQL 会将操作的数据写入 binlog 中。

        2.事务的提交和回滚信息

        当一个事务提交时,MySQL 会将事务提交的信息写入 binlog 中。如果一个事务回滚了,MySQL 也会将回滚信息写入 binlog 中,这个时候的 binlog 记录的信息可以用于数据恢复。

        3.数据库的状态信息

binlog 记录了 MySQL 的状态信息,包括 MySQL 的版本、服务器的 ID、执行的线程 ID 等信息。

binlog 的使用场景:

  1. 数据复制:MySQL 的主从复制是通过 binlog 实现的。主库将修改操作写入 binlog,从库通过读取主库的 binlog 文件进行复制。

  2. 数据恢复:binlog 中记录了所有对数据库的修改操作,因此可以利用 binlog 进行数据恢复。

  3. 数据备份:通过将 binlog 文件进行备份,可以在需要的时候恢复到某一个时间点的数据状态。

需要注意的是,binlog 记录的是 SQL 语句的修改操作,而不是记录行级别的修改。因此在进行数据恢复的时候,如果有使用到非 SQL 语句的修改方式,如直接修改文件等方式,则无法通过 binlog 进行恢复。

4.Mysql的binlog有几种录入格式?分别有什么区别?

MySQL的binlog有三种格式:statement、row、mixed。

  • statement格式:记录的是SQL语句。在主库上执行的SQL语句会被记录到binlog中,并在从库上重放SQL语句来实现主从复制。这种格式相对简单,适用于数据量较小、写入操作较为简单的场景。
  • row格式:记录的是行的变化情况。在主库上执行的每个行级别的写操作都会被记录到binlog中,并在从库上对相应的行进行修改,来实现主从复制。这种格式相对复杂,但是适用于数据量较大、写入操作频繁的场景。
  • mixed格式:混合了statement和row两种格式。MySQL会根据具体的操作选择使用哪种格式。这种格式可以兼顾上述两种格式的优点,但是实现起来比较复杂。

5.redo log 如何保证事务的持久性?

在 MySQL 中,redo log 主要是用来保证事务的持久性,其实现方式如下:

当一个事务提交时,InnoDB 引擎会首先将该事务的 redo log 缓存到内存中的 redo log buffer 中,同时在内存中更新相应的数据页;然后在适当的时机,将 redo log buffer 中的 redo log 写入磁盘上的 redo log 文件,以确保该事务在崩溃等异常情况下,能够通过 redo log 进行恢复。

在写入磁盘时,MySQL 会将 redo log 文件写入两个文件组成的循环队列中,每个文件的大小由配置参数 innodb_log_file_size 控制,默认值为 48MB。写入时会按照顺序从第一个文件开始写,直到写满,然后继续写入下一个文件。

因为 redo log 采用的是顺序写入磁盘的方式,所以可以提高写入磁盘的效率。同时,redo log 采用循环队列的方式,可以实现覆盖写,节省磁盘空间。

InnoDB的redo log是固定大小的,比如可以配置为一组4个文件,每个文件的大小是1GB

write pos是当前记录的位置,一边写一边后移,写到第3号文件末尾后就回到0号文件开头。checkpoint是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。

write pos和checkpoint之间的是“粉板”上还空着的部分,可以用来记录新的操作。如果write pos追上checkpoint,表示“粉板”满了,这时候不能再执行新的更新,得停下来先擦掉一些记录,把checkpoint推进一下。

有了redo log,InnoDB就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe

6.页修改之后为什么不直接刷盘呢?

在数据库中,对数据的修改是指修改内存中的数据页,而不是直接修改磁盘上的数据文件。这样做的主要原因是为了提高写入性能和保证数据的一致性。

如果每次有修改操作就直接写入磁盘,会严重影响写入性能。而且,频繁的磁盘写入会导致磁盘的寿命缩短。此外,直接将修改操作写入磁盘可能会导致数据不一致的问题,例如操作系统或硬件出现错误或中断等情况下。

因此,数据库通常采用一种称为“写前日志”(Write-Ahead Logging,WAL)的技术,将对数据的修改记录到日志文件中。在写入磁盘之前,会先将修改操作记录到 redo log 中,保证事务的持久性和原子性。只有在事务提交的时候,才会将 redo log 中的修改操作同步到磁盘上的数据文件,这样就可以保证数据的一致性和持久性。

当系统崩溃或重启时,可以通过 redo log 重放来恢复数据文件。这是因为,在数据库中,事务提交时,会先将 redo log 中的数据写入到磁盘上的数据文件中,然后再将事务提交的标识写入到 redo log 中。因此,在数据库启动时,只需要将 redo log 中的操作重放,就可以将数据恢复到最新的状态。

7.binlog 和 redolog 有什么区别?

  1. redo log(重做日志)是 InnoDB 存储引擎自己实现的一种日志,用于保证事务的持久性。当事务执行过程中修改了 InnoDB 表中的数据时,InnoDB 会先将修改操作记录到 redo log 中,并更新内存中的数据页。在事务提交前,InnoDB 会将 redo log 写入磁盘,保证数据持久化。redo log 是以循环写的方式写入磁盘,可以重复使用。redo log 的大小是固定的,可以通过参数 innodb_log_file_size 来设置。

  2. binlog(归档日志)是 MySQL 数据库服务层实现的一种日志,记录了数据库的所有更新操作,包括对哪个数据库的哪个表进行了什么样的操作。binlog 用于在主从复制、数据库恢复等场景下使用。binlog 中的日志记录是顺序写入的,不会重复使用。binlog 的大小是可变的,可以通过参数 max_binlog_size 来设置。

这两种日志有以下三点不同。

  1. redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。

  2. redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。

  3. redo log是循环写的,空间固定会用完;binlog是可以追加写入的。“追加写”是指binlog文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

8.怎样让数据库恢复到半个月内任意一秒的状态?

binlog会记录所有的逻辑操作,并且是采用“追加写”的形式。如果你的DBA承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有binlog,同时系统会定期做整库备份。这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。

当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么做:

  • 首先,找到最近的一次全量备份,如果你运气好,可能就是昨天晚上的一个备份,从这个备份恢复到临时库;
  • 然后,从备份的时间点开始,将备份的binlog依次取出来,重放到中午误删表之前的那个时刻。

这样你的临时库就跟误删之前的线上库一样了,然后你可以把表数据从临时库取出来,按需要恢复到线上库去。

9.redo log和binglog如何保证两份日志之间的逻辑一致

redo log 和 binlog 的逻辑一致性是通过两阶段提交 (two-phase commit) 来保证的。在执行修改操作时,MySQL 会先将这些操作记录到 redo log 中,然后再将这些操作记录到 binlog 中。由于 redo log 和 binlog 的记录顺序不同,它们之间可能存在逻辑不一致的情况。为了保证逻辑一致性,MySQL 引入了两阶段提交机制。

在两阶段提交中,MySQL 会先将修改操作记录到 redo log 中的 prepare 阶段,此时并没有提交事务。然后 MySQL 将这些操作记录到 binlog 中,并将事务标记为 prepare 状态。最后,在 commit 阶段,MySQL 会将事务从 prepare 状态转变为 commit 状态,同时将 redo log 中的操作提交到磁盘中。这样就保证了 redo log 和 binlog 之间的逻辑一致性。

需要注意的是,在两阶段提交中,如果在 prepare 阶段发生了错误,MySQL 会回滚该事务,并将 binlog 中对应的操作标记为 rollback。这种情况下,redo log 和 binlog 之间就不会存在逻辑不一致的问题。

redo log 和 binlog 的逻辑一致性是通过两阶段提交来保证的,这也是 MySQL 实现 ACID 中的 A (原子性) 和 C (一致性) 的关键。

10.undo log 如何保证事务的原子性?

undo log 是 InnoDB 存储引擎用来实现事务的原子性和回滚操作的一种机制。在事务进行修改时,InnoDB 会先将修改前的数据写入到 undo log 中,然后进行数据的修改操作,如果事务回滚,则可以利用 undo log 中的信息将数据恢复到修改之前的状态,从而实现事务的原子性。

具体来说,当一个事务开始时,InnoDB 会为该事务开启一个 undo log,所有该事务对数据的修改都会先写入 undo log 中,然后再对数据进行修改。当事务提交时,会将所有对数据的修改一次性写入 redo log 中,然后再将事务的提交状态写入 redo log 中,表示事务提交成功。

如果事务执行过程中发生了错误导致回滚,InnoDB 会利用 undo log 中的信息将数据恢复到修改前的状态。当事务回滚时,InnoDB 会将事务对数据的修改操作反向执行,即将修改后的数据恢复成修改前的数据,然后将这些操作写入 redo log 中,表示事务回滚成功。

undo log 主要用来保证事务的原子性和回滚操作。当事务执行失败时,可以利用 undo log 中的信息将数据恢复到修改之前的状态,从而避免了数据的损坏和不一致。

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

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

相关文章

Linux系统安装Docker

目录 Linux系统安装Docker 1、如果之前安装过旧版本的Docker,可以使用下面命令卸载 2、安装docker 3、启动docker 4、配置镜像加速 Linux系统安装Docker 前提:Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10&#xff0…

LearnDash Groups学习群组:您需要了解的一切

大约131k 网站使用 LearnDash。因此,毫无疑问,LearnDash是 WordPress 领域中最受欢迎的 LMS。而且,这是因为它具有强大的功能。但让它更受欢迎的是它与大多数第 3 方扩展很好地集成,并且比现有的任何其他 LMS 都更灵活。群组和群组…

扬帆优配|淡定的周期股走出慢牛,这些超跌大象股低估值

多只大市值股走势良好,超跌的绩优大盘股会否后发先至? 三一集团定下万亿市值方针 三一重工董事长许诺向金牌职工派发500万元巨额奖金刷屏网络,不过奖赏兑现的前提是三一集团的总市值要超越万亿元。 3月4日,在央视《对话》节目中…

同城外卖跑腿系统源码分析

外卖订餐已经成为很多“社畜”日常不可分割的一部分,足不出户,只需要一部电子设备即可在线订餐,并且可提供的选择非常多样化,与传统的电话订餐外卖模式相比也更便捷的多。 因此,同城外卖跑腿系统源码得以爆火&#xff…

微服务里的小问题

1.微服务为什么设置不同的namespace 为了实现三种服务三种情况下的隔离。 2.为什么要用nginx为naocos集群结点做负载均衡? 2.1 正向代理 就像我们访问外网需要一个代理。 2.2 反向代理 我们不需要访问真实的ip,只需要访问 这个服务的代理服务器即可&a…

【极致简洁】Python tkinter 实现下载工具,你想要的一键获取

嗨害大家好鸭!我是小熊猫~开发环境本次项目案例步骤成品效果【咱追求的就是一个简洁】界面如何开始?1.导入模块2.创建窗口【这步很重要】功能按键1.创建一个下拉列表2.设置下拉列表的值3.设置其在界面中出现的位置 column代表列 row 代表行4.设置下拉列表…

考研复试——计算机组成原理

文章目录计算机组成原理1. 计算机系统由哪两部分组成?计算机系统性能取决于什么?2. 冯诺依曼机的主要特点?3. 主存储器由什么组成,各部分有什么作用?4. 什么是存储单元、存储字、存储字长、存储体?5. 计算机…

【PyTorch】教程:torch.nn.Hardswish

torch.nn.Hardswish 原型 CLASS torch.nn.Hardswish(inplaceFalse) 参数 inplace (bool) – 内部运算,默认为 False 定义 Hardswish(x){0if x≤−3,xif x≥3,x⋅(x3)/6otherwise\text{Hardswish}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ x & \te…

2.Elasticsearch入门

2.Elasticsearch入门[toc]1.Elasticsearch简介Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索,稳定,可靠,快速,安装使用方便。客户端支持Java、.NET(C#)、PHP、Pyth…

win11下载配置CIC Flowmeter环境并提取流量特征

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、下载CIC Flowmeter二、安装java、maven、gradle和IDEA1.java 1.82.maven3.gradle4.IDEA三、CICFlowMeter-master使用四、流量特征1.含义2.获取前言 配了一整…

游戏场景编辑器和骨骼动画相关软件

游戏场景编辑器 一.Tiled(2D) Tiled 是帮助你开发游戏内容的 2D 地图编辑器。它的主要功能是可以编辑各种形式的瓦片地图,还支持通过用空图片这种强大的方式来标记额外信息给游戏使用。Tiled 关注的是总体灵活性,同时尽量保持直观性。 Tiled Map 不但…

获取Github仓库star、fork、watch数

Hi I’m Shendi https://sdpro.top/blog/html/article/1016.html 以下网址可以得到github的star,fork,watch数量图片 https://shields.io/category/social 获取仓库的 Star 则点击 Github Repo stars 填好选项后下方就会出现图标,点击CopyBa…

工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码)

博主的合并代码gitgithub.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1 SDKROS参考我之前的博客,步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm1001.2014.3001.55011.2 相机标定参数…

解决新版QGIS找不到Georeferencer插件

目录1. 问题分析1.1 去 Raster 找,没找到1.2 去插件搜,未搜到1.3 插件库里也搜不到2. 解决办法在 QGIS 3.30中,按常规办法,找不到 Georeferencer插件,它并没有被安装,在库中也找不到它, 请问问题…

sheng的学习笔记Eureka Ribbon

Eureka-注册中心Eureka简介官方网址:https://spring.io/projects/spring-cloud-netflixEureka介绍Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。Zooleeper nacos.Eureka 采用了 C-S 的设计架构。Eureka Server 作为服…

【项目实战】IDEA中 90%的人都不后知后觉的小技巧汇总

一、 IDEA中如何设置左侧导航条跟代码保持同步? https://blog.csdn.net/Arry_Coding/article/details/102389149 二、IDEA中如何将Services调出并将启动类显示在Services中? https://blog.csdn.net/qq_38343402/article/details/106325154 三、IDEA中…

工业企业用电损耗和降损措施研究

来自用电设备和供配电系统的电能损耗。而供配电系统的电能损耗,包括企业变配电设备、控制设备企业在不断降低生产成本,追求经济效益的情况下,进一步降低供配电系统中的电能损耗,使电气设摘要:电网电能损耗是一个涉及面很广的综合性问题,主要包括管理损耗和技术损耗两部分…

频谱分析仪的工作原理

频谱分析仪架构犹如时域用途的示波器,外观如图 1.2 所示,面板上布建许多功能控制按键,作为系统功能之调整与控制,系统主要的功能是在频域里显示输入信号的频谱特性。频谱分析仪依信号处理方式的不同,一般有两种类型&am…

硬件设计 之摄像头分类(IR摄像头、mono摄像头、RGB摄像头、RGB-D摄像头、鱼眼摄像头)

总结一下在机器人上常用的几种摄像头,最近在组装机器人时,傻傻分不清摄像头的种类。由于本人知识有限,以下资料都是在网上搜索而来,按照摄像头的分类整理一下,供大家参考: 1.IR摄像头: IRinfr…

window.print() 前端实现网页打印详解

目录 前言 一、print()方法 二、打印样式 2.1使用打印样式表 2.2使用媒介查询 2.3内联样式使用media属性 2.4在css中使用import引入打印样式表 三、打印指定区域部分内容 3.1方法一 3.2方法二 3.3方法三 四、强制插入分页 4.1page-break-before(指定元素前…