MySQL面试题-日志
目录
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 中常见的日志有哪些?
-
redo log:重做日志,用于恢复数据,保证 MySQL 异常宕机后数据的完整性,只记录物理日志(日志记录了对数据页的修改,而不是逻辑修改),循环写,因为不需要回滚,所以可以覆盖写。
-
undo log:撤销日志,用于回滚事务,可以保证事务的原子性、一致性和隔离性。记录逻辑日志,循环写,记录事务操作之前的值,便于回滚事务。
-
binlog:二进制日志,记录所有修改数据库的操作,包括增、删、改等操作,用于数据恢复、数据复制等场景。
-
error log:错误日志,记录 MySQL 引擎在运行过程中出现的错误、警告等信息,用于排查问题。
-
slow query log:慢查询日志,记录执行时间超过阈值的 SQL 语句,用于性能调优、查询优化等场景。
-
general log:通用日志,记录所有客户端的查询和状态变更信息,包括查询、连接、断开等操作,通常用于诊断问题和安全审计。
-
relay log:中继日志,用于 MySQL 主从复制中的数据传输,从 MySQL 主节点复制数据到从节点。
2.慢查询日志有什么用?
慢查询日志是 MySQL 中用于记录执行时间超过阈值的 SQL 语句的日志,通常用于分析性能问题。它可以记录每条执行时间超过指定阈值的 SQL 语句,并记录下执行时间、访问的表、使用的索引以及执行 SQL 的用户等信息,从而帮助开发人员找到慢查询的原因和优化方案。
慢查询日志可以帮助开发人员识别哪些 SQL 语句执行时间长,从而可以进行针对性的优化。优化的方法包括但不限于优化查询语句的写法、增加索引、分离大表等。通过分析慢查询日志可以让开发人员更加深入地了解系统的瓶颈和性能问题,从而制定更好的优化策略。
慢查询日志的开启和关闭可以通过在 MySQL 配置文件中设置参数 slow_query_log
和 long_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 的使用场景:
-
数据复制:MySQL 的主从复制是通过 binlog 实现的。主库将修改操作写入 binlog,从库通过读取主库的 binlog 文件进行复制。
-
数据恢复:binlog 中记录了所有对数据库的修改操作,因此可以利用 binlog 进行数据恢复。
-
数据备份:通过将 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 有什么区别?
-
redo log(重做日志)是 InnoDB 存储引擎自己实现的一种日志,用于保证事务的持久性。当事务执行过程中修改了 InnoDB 表中的数据时,InnoDB 会先将修改操作记录到 redo log 中,并更新内存中的数据页。在事务提交前,InnoDB 会将 redo log 写入磁盘,保证数据持久化。redo log 是以循环写的方式写入磁盘,可以重复使用。redo log 的大小是固定的,可以通过参数
innodb_log_file_size
来设置。 -
binlog(归档日志)是 MySQL 数据库服务层实现的一种日志,记录了数据库的所有更新操作,包括对哪个数据库的哪个表进行了什么样的操作。binlog 用于在主从复制、数据库恢复等场景下使用。binlog 中的日志记录是顺序写入的,不会重复使用。binlog 的大小是可变的,可以通过参数
max_binlog_size
来设置。
这两种日志有以下三点不同。
-
redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用。
-
redo log是物理日志,记录的是“在某个数据页上做了什么修改”;binlog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这一行的c字段加1 ”。
-
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 中的信息将数据恢复到修改之前的状态,从而避免了数据的损坏和不一致。
相关文章:
MySQL面试题-日志
目录 1.MySQL 中常见的日志有哪些? 2.慢查询日志有什么用? 3.binlog 主要记录了什么? 4.Mysql的binlog有几种录入格式?分别有什么区别? 5.redo log 如何保证事务的持久性? 6.页修改之后为什么不直接刷…...
Android 10.0 去掉Launcher3默认给 icon增加的APK图标白边
1.概述 在10.0的系统产品开发中,Launcher3定制化开发中,发现在给第三方app的icon绘制图标的时候,会有白边第三方app的图标没有完全绘制出来,而系统app不存在这个问题,是完全绘制出来的,所以需要分析图标绘制类来解决这个问题 2.去掉Launcher3默认给 icon增加的APK图标白…...
E900V21C(S905L-armbian)安装armbian-Ubuntu(WiFi)
基本上是s905L芯片的刷机都是如此,包括Q7等 在网上寻找好多的教程关于e900v21c的刷机包和教程都少的可怜,唯一的就是这个:山东联通版创维E900V21C盒子刷入Armbiam并安装宝塔和Docker,但他是不能用WiFi和蓝牙的然后就是寻找s90l的…...
tpc协议的3次握手和4次挥手
建立连接的3次握手过程: A: 我想和你建立连接,你收到我的请求吗?(我想娶你) B: 好的,我收到了你的请求,我们可以建立连接,我同意。(好的,我愿意嫁给你) A: 好的,我收到了你的回应,我…...
YOLOv5害虫识别项目代码打包完整上传Gitee仓库(已开源)以及git上传速率限制踩坑记录
YOLOv5害虫识别项目代码打包完整上传Gitee仓库(已开源)以及git上传速率限制踩坑记录 ps: 最近很多小伙伴需要这个害虫识别项目的源码,由于文件过大,所以将代码完整上传至gitee,所有文件、教程、论文、以及代码模型…...
从零开始学习c语言|21、动态内存管理
一、malloc函数 1、什么是malloc函数 malloc是memery(内存)和allocate(分配)的缩写,顾名思义,malloc函数为动态分配内存的意思 2、malloc函数语句 int *p(int *)malloc(sizeof(int))malloc函数的形参为申请的内存空间大小,上述申请了一个i…...
swagger关闭/v2/api-docs仍然可以访问漏洞
今天接到安全团队的说swagger有未授权访问漏洞,即使在swagger关闭的情况下http://127.0.0.1:8086/agcloud/v2/api-docs?group%E7%94%A8%E6%88%B7%E5%85%B3%E8%81%94%E4%BF%A1%E6%81%AF%E6%A8%A1%E5%9D%97仍然还能访问。 看了下原来是有写一个拦截器 registry.addI…...
k8s pod调度总结
在Kubernetes平台上,我们很少会直接创建一个Pod,在大多数情况下会通过控制器完成对一组Pod副本的创建、调度 及全生命周期的自动控制任务,如:RC、Deployment、DaemonSet、Job 等。本文主要举例常见的Pod调度。1全自动调度功能&…...
28个案例问题分析---10---对生产环境的敬畏--生产环境
一:背景介绍 1:上午9:23,老师没有进行上课,但是却又很多的在线人员,并且在线人员的时间也不正确。 2:开发人员及时练习用户,查看用户上课情况。 3:10点整,询问项目组长发…...
视觉SLAM十四讲ch7-1视觉里程计笔记
视觉SLAM十四讲ch7-1 视觉里程计笔记本讲目标从本讲开始,开始介绍SLAM系统的重要算法特征点法ORB特征BRIEF实践特征提取与匹配2D-2D:对极几何八点法求E八点法的讨论从单应矩阵恢复R,t小结三角化![在这里插入图片描述](https://img-blog.csdni…...
模仿评论样式
主要用到了padding-left把左侧的空白给留出来,然后把头像定位到留出的空白位置。行内对齐样式,使用了display:inline-flex;align-items:center;图标本来要用字体比较方便,暂时用的从icon font下载的svg样式写的一塌糊涂,一点也没考…...
xxl-job调度中心、执行器源码详解
文章目录简介调度中心一.程序启动初始化1.初始化入口类2.初始化I18n3.初始化快慢调度线程池4.初始化处理执行器注册或移除线程池更新执行器最新在线的守护线程5.初始化监控任务调度失败或执行失败的守护线程6.初始化处理执行器回调线程池监控任务执行结果丢失的守护线程7.初始化…...
cpp c++summary笔记 复杂类型 “right-left” rule
复杂类型 “right-left” rule 先向右走在向左走,循环往复,右侧的终止为看到右括号,右中括号,左侧为左括号,指针(或其他int等)。 符号读作*指向AA的指针(总在左侧)[]容纳AA的数组(总在左侧)()返…...
bash编程(马哥)
bash基础特性: 命令行展开:~,{} 命令别名:alias,unalias 命令历史:history 命令和路径补全:$PATH glob通配符:*,?,[],[^], 快捷键&am…...
搭建Gerrit环境Ubuntu
搭建Gerrit环境 1.安装apache sudo apt-get install apache2 注意:To run Gerrit behind an Apache server using mod_proxy, enable the necessary Apache2 modules: 执行:sudo a2enmod proxy_http 执行:sudo a2enmod ssl 使新的配置生效,需要执行如下命令:serv…...
朋友去华为面试,轻松拿到26K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…...
springboot项目如何配置启动端口
文章目录0 写在前面1 配置文件(.yaml)--推荐2 配置文件(.properties)3 IDEA配置--不推荐4 写在最后0 写在前面 项目启动需要一个独立的端口,所以在此记录一下。 根据配置文件的后缀书写格式略有不同。 1 配置文件(.yaml)–推荐 若是.yaml后缀的配置文件࿰…...
IOS - 抓包通杀篇
IOS中大多数情况,开发者都会使用OC提供的api函数,CFNetworkCopySystemProxySettings来进行代理检测; CFNetworkCopySystemProxySettings 检测函数直接会检测这些ip和端口等: 采用直接附加页面进程: frida -UF -l 通…...
盒子模型的简介
盒子的组成 一个盒子由外到内可以分成四个部分:margin(外边距)、border(边框)、padding(内边距)、content(内容)。会发现margin、border、padding是css属性,因…...
Kubernetes 101,第二部分,pod
在上一篇文章中,我们了解了Kubernetes 的基础知识以及对其主要架构的介绍。 介绍完毕后,就该探索如何在 Kubernetes 中运行应用程序了。 容器包装器 在 Kubernetes 中,我们无法直接创建单个容器。相反,为了更好,我们可以将容器包装成一个单元,其中包括: 规范:多个容器可…...
protobuf序列化解码原理
Protobuf的编码方式 Varints是一种紧凑表示数字的办法。他用一个或者多个字节表示一个数字,值越小的数字节节数越少。相对与传统的用4字节表示int32类型的数字,Varints对于小于128的数值都可以用一个字节表示,大于128的数值会用更多的字节来表…...
OpenCV——line、circle、rectangle、ellipse、polylines函数的使用和绘制文本putText函数以及绘制中文的方法。
学习OpenCV的过程中,画图是不可避免的,本篇文章旨在介绍OpenCV中与画图相关的基础函数。 1、画线条——line()函数 介绍: cv2.line(image, start_point, end_point, color, thickness)参数: image: 图像start_point:…...
性能平台数据提速之路
作者 | 性能中台团队 导读 性能平台负责MEG所有研发数据的管理、接入、传输、应用等各个环节。数据的提速对于公司报表建设、决策分析、转化策略效果都有至关重要的影响。重点介绍数据生产端与消费端提速落地实践,如何高性价比满足大数据生产端提速?如何…...
Dns域名解析服务器
前言 域名解析服务器的介绍 域名服务器的类型划分 DNS域名解析的过程 为什么需要DNS解析域名为IP地址? 通俗理解Dns DNS劫持 DNS污染 Dns面试经验 前言 DNS是一个应用层协议,用来获取域名对应的IP地址 域名解析服务器的介绍 DNS(Dom…...
关于 JavaScript 中的 Promises
在 JavaScript 中,Promise 是一个对象,它表示一个可能还不可用,但会在未来解决的值。Promises 用于处理异步操作,例如发出网络请求或访问数据库,其中结果不是立即可用的。如果你准备好了,我想开始我们的冒险…...
PMP考前冲刺题——错题集
3、 [多选] 采购部门需要向全球不同的供应商采购项目所需的各种商品,所有采购订单均己发送给供应商并已按要求处理。项目经理后来收到客户提出的变更请求。由于项目经理未及时通知采购部门,运抵的所有物品都是按原来的需求所提供。 项目经理本应做什么来…...
【C++】30h速成C++从入门到精通(多态)
多态的概念多态:通俗来说就是多种心态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。多态的定义及实现多态的构成条件多态是在不同继承关系的类对象,去调用同意函数,产生了不同的行为࿰…...
从proc文件系统中获取gateway的IP地址
在linux的命令行下获取当前网络环境的gateway的IP并不是一件难事,常用的命令有ip route或者route -n,其实route -n也是通过读取proc文件系统下的文件来从内核获取路由表的,但ip route是通过netlink来获取的路由表;本文将讨论如何编写程序从proc文件系统中获取路由表,并从路…...
【LeetCode】剑指 Offer(17)
目录 题目:剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer …...
MySQL索引类型
MySQL 是最流行的关系型数据库管理系统,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 索…...
网站建设 短信群发模板/郑州网站建设哪家好
system.mss ----> Peripheral Drivers -----> Import Examples 也可以通过边上的文档 查看函数信息...
怎么在一个网站做多个页面/网站推广seo
什么是盲注? 当应用程序易受SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果或任何数据库错误的详细信息时,就会出现盲SQL注入。 对于盲目SQL注入漏洞,许多技术(如联合攻击)都是无效的,因为…...
做网站一般什么问题/百度seo优化公司
计算机基础课程教学与学习模式的研究大学计算机基础教学反思浅谈大学计算机基础课程教学计算思维是计算机技术发展的必然结果。随着电子信息时代的发展,计算思维逐渐被应用于方方面面。大学阶段,计算机基础课程是一项培养学生计算机操作能大学计算机基础…...
网站导航栏内容/外贸网站优化公司
工作环境(蓝色粗体字为特别注意内容)1,系统环境:Win7 Ultimate sp1 2,软件环境:Google浏览器 3,参考文献:https://www.v2ex.com/t/120451 今天在安装Web of Science的Google浏览器插件Kopernio的时候&…...
用jsp做留言板网站/百度搜索大全
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。 未经允许,不得转载。 一、前言 在 Android 系统中,当运行的 App 被移动到后台的之后,Android 为了保…...
厦门网站建设公司排名/合肥网站优化
一.html <canvas id"clock" width"500" height"500" >你的浏览器不支持canvas</canvas>二.css canvas{background: #000; }三.js <script>/*难点1:怎样把时刻线绘制出来难点2: 时间指针的旋转角度秒:3…...