MySQL日志——针对实习面试

目录

  • MySQL日志
    • MySQL有哪些日志?
    • 请解释一下MySQL的二进制日志(Binlog)的作用?
      • 复制(Replication)
      • 数据恢复(Point-in-Time Recovery)
    • Binlog日志的三种格式是什么?
    • 如何使用Binlog恢复数据?
    • Binlog的写入时机是什么时候?
    • Redo Log(重做日志)是什么?为什么需要Redo Log?
    • Redo Log和Binlog有什么区别?
    • 什么是WAL技术?它的好处是什么?
    • MySQL的Undo Log有什么作用?
    • MySQL的查询日志(General Query Log)和慢查询日志(Slow Query Log)有什么区别?

MySQL日志

在这里插入图片描述

MySQL有哪些日志?

  • 错误日志(error log): 记录了MySQL服务器在启动和运行过程中遇到的错误信息。
  • 二进制日志(Binary Log,Binlog): 记录了所有修改数据库数据的语句,如INSERT、UPDATE、DELETE等。主要用于复制(主从复制)和数据恢复。
  • 重做日志(Redo Log): 这是InnoDB存储引擎特有的日志,用于确保事务日志的持久性。
  • 回滚日志(Undo Log): 同样是InnoDB存储引擎特有的日志,用于处理事务的回滚操作
  • 查询日志(General Query Log): 记录了发往MySQL服务器的每个客户端的连接和语句。
  • 慢查询日志(Slow Query Log): 记录了执行时间超过指定阈值(long_query_time参数)的查询。
  • 事务日志(Transaction Log):有时也被称作redo log和undo log的组合,记录了事务的修改,用于事务的持久性和一致性。
  • 审计日志(Audit Log):记录了用户对数据库的所有操作,用于安全审计和合规性检查。

其中前面六个在面试中较为重要,本文主要围绕前面六个来讲述

请解释一下MySQL的二进制日志(Binlog)的作用?

核心作用

复制(Replication)

  • Binlog是MySQL复制架构的基础。在主从复制配置中,主服务器(Master)会记录所有修改数据的语句到Binlog中。然后,这些日志会被发送到从服务器(Slave),从服务器会重放这些日志中的语句,以确保从服务器的数据与主服务器保持一致。这种机制允许数据库系统在多个服务器之间同步数据,提高数据的可用性和容错性。

数据恢复(Point-in-Time Recovery)

  • Binlog还可以用来进行数据恢复如果数据库发生故障或数据丢失,可以使用Binlog来恢复到故障发生前的一个特定时间点。通过重新执行Binlog中的语句,可以将数据库恢复到故障发生前的状态,从而减少数据丢失。

除了上述两个主要作用,Binlog还有其他一些用途:

  • 审计和监控:Binlog可以用于审计和监控数据库的变更,帮助数据库管理员跟踪和审查数据库的变更历史。
  • 数据迁移:在进行数据库迁移时,Binlog可以用于将数据从一个服务器迁移到另一个服务器。
  • 备份:虽然Binlog不是用来做备份的,但在某些情况下,它可以用来辅助备份和恢复操作。

Binlog日志的三种格式是什么?

  • Statement(基于SQL语句的复制,SBR):在这种模式下,Binlog记录的是每一条会修改数据的SQL语句。
  • Row(基于行的复制,RBR):从MySQL 5.1.5版本开始引入,Row格式不记录SQL语句上下文相关信息,仅保存哪条记录被修改。
  • Mixed(混合模式复制,MBR):从MySQL 5.1.8版本开始提供,Mixed格式实际上是Statement和Row的结合。在Mixed模式下,系统会根据具体情况自动判断使用Statement还是Row来记录Binlog。一般的语句修改使用Statement格式保存Binlog,而对于Statement无法准确完成主从复制的操作,则采用Row格式保存Binlog。这种模式结合了Statement和Row的优点,既节省了空间,又能在需要时保证数据的一致性。

如何使用Binlog恢复数据?

  1. 确认Binlog状态
    首先,需要确认MySQL服务器是否开启了Binlog。可以通过执行SHOW VARIABLES LIKE 'log_bin';来查看Binlog是否开启。

  2. 查看Binlog文件列表
    使用SHOW MASTER LOGS;命令查看所有Binlog日志文件列表。

  3. 确定恢复点
    通过SHOW MASTER STATUS;命令查看最后一个Binlog日志的编号名称及其最后一个操作事件的位置(pos结束点的值)。

  4. 使用mysqlbinlog工具
    使用mysqlbinlog工具来解析Binlog文件,并将其中的SQL语句导出到一个文本文件中。例如,mysqlbinlog binlog.000001 > binlog.sql

  5. 恢复数据
    将导出的SQL语句文件(如binlog.sql)导入到目标数据库中,以还原数据。可以使用mysql -u username -p -h hostname dbname < binlog.sql命令进行数据恢复。

Binlog的写入时机是什么时候?

  1. 事务提交时(innodb_flush_log_at_trx_commit设置为1时)

    • 默认情况下,对于InnoDB存储引擎,innodb_flush_log_at_trx_commit的值被设置为1。这意味着每个事务在提交时,不仅会将Redo Log写入磁盘,还会将对应的Binlog写入到磁盘。这样做是为了确保事务的持久性,即使在发生崩溃的情况下,也能通过Redo Log和Binlog恢复数据。
  2. 事务日志缓存刷新时(innodb_flush_log_at_trx_commit设置为0时)

    • 如果innodb_flush_log_at_trx_commit被设置为0,事务提交时不会立即将Binlog写入磁盘,而是先写入到Binlog缓存中。然后,MySQL会根据sync_binlog参数的设置来决定何时将Binlog缓存中的内容刷新到磁盘上。sync_binlog参数指定了每次事务提交后需要写入磁盘的Binlog事件的数量。

Redo Log(重做日志)是什么?为什么需要Redo Log?

Redo Log(重做日志)是MySQL数据库中InnoDB存储引擎特有的一种日志,它用于确保事务日志的持久性和数据的完整性

Redo Log的作用:

  1. 确保事务的持久性:在事务提交时,必须确保所有的修改都已经写入到持久化存储中。由于直接写入磁盘速度较慢,InnoDB先将其写入内存的Redo Log Buffer中,然后选择合适的时机批量写入到磁盘上的Redo Log Files中。这样既提高了性能,又保证了事务的持久性。
  2. 崩溃恢复:如果数据库发生崩溃(如服务器宕机、电源故障等),Redo Log可以用来恢复数据,确保数据的完整性。在数据库重启时,InnoDB会读取Redo Log Files,并将未提交的事务重新执行一遍,以确保所有数据的变更都被正确地应用。
  3. 提高性能:如果每次数据变更都直接写入磁盘,会大大降低数据库的性能。Redo Log允许InnoDB先在内存中记录变更,然后异步地批量刷新到磁盘,这样可以减少磁盘I/O操作,提高数据库性能。

Redo Log和Binlog有什么区别?

  1. 所属组件不同

    • Redo Log:属于InnoDB存储引擎的日志,专门用于InnoDB表。
    • Binlog:属于MySQL Server层的日志,记录所有数据库的修改操作,不仅限于InnoDB表。
  2. 用途不同

    • Redo Log:主要用于保证事务的持久性和在发生故障时恢复数据。
    • Binlog:主要用于复制(主从复制)和数据恢复。
  3. 存储位置不同

    • Redo Log:存储在InnoDB的专属日志文件中。
    • Binlog:存储在MySQL的数据目录下。
  4. 对性能的影响

    • Redo Log:对性能的影响相对较小,因为它是物理日志,写入操作较为高效。
    • Binlog:对性能的影响可能更大,尤其是当设置为Statement格式时,需要记录完整的SQL语句。

什么是WAL技术?它的好处是什么?

WAL(Write-Ahead Logging)技术是一种在数据库系统中用于提供原子性和持久性的关键技术。其核心思想是在对数据库进行任何持久性更改之前先将更改记录到一个日志文件中。这种技术的优势在于,即使系统在实际更改数据之前崩溃或发生故障,数据库依然可以通过日志来恢复一致性状态。

WAL技术的好处主要包括:

  1. 提高数据安全性:在修改数据之前先将修改操作写入日志,确保即使系统崩溃,也可以通过日志恢复数据。
  2. 支持快速崩溃恢复:如果数据库在写入数据文件的过程中崩溃,WAL机制允许系统通过重新应用日志来恢复未完成的修改操作,保证系统的一致性。
  3. 减少随机I/O操作:数据修改在写入时会产生随机I/O,而日志文件的写入是顺序的,因此写日志的开销较小。将修改操作先记录到日志后,再通过批量的方式将数据写入磁盘,减少了直接写数据时的随机I/O。
  4. 支持事务的原子性和持久性:WAL是事务管理的重要组成部分。通过WAL机制,数据库可以确保事务在提交时,其所有的修改操作都已被记录,确保事务的持久性。即使系统崩溃,日志仍然可以用来回滚未完成的事务或重做已提交但未写入的数据。

MySQL的Undo Log有什么作用?

  1. 事务回滚

    • 当一个事务需要被回滚,无论是因为执行了ROLLBACK语句,还是因为事务在执行过程中遇到了错误,Undo Log都包含了必要的信息来撤销事务中的所有修改。这样,数据库就能返回到事务开始前的状态,保持数据的一致性
  2. 多版本并发控制(MVCC)

    • InnoDB使用MVCC来允许非锁定读取,这意味着读操作不会阻塞写操作写操作也不会阻塞读操作。Undo Log存储了行的旧版本,这样当一个事务需要读取已经被其他事务修改但尚未提交的行时,它可以从Undo Log中读取到行的旧版本,从而实现非阻塞的一致性视图。

Undo Log还有助于提高事务处理的效率,因为它允许InnoDB存储引擎在不需要锁定资源的情况下处理并发事务。这对于提高数据库的并发性能至关重要。

MySQL的查询日志(General Query Log)和慢查询日志(Slow Query Log)有什么区别?

  1. 查询日志(General Query Log)

    • 记录所有客户端发送到MySQL服务器的语句,包括连接和断开连接的事件。
    • 它记录了所有执行的SQL语句,无论执行时间长短,因此可能会对性能产生一定影响。
    • 默认情况下是关闭的,需要手动开启。
    • 可以用于诊断问题、审计与监控以及调试目的。
  2. 慢查询日志(Slow Query Log)

    • 记录执行时间超过预设阈值(long_query_time参数设定的时间,默认通常为10秒)的SQL查询语句
    • 它用于帮助数据库管理员识别并优化那些执行速度较慢的查询,提升数据库性能。
    • 默认情况下也是关闭的,需要手动开启。
    • 慢查询日志的内容包含查询的执行时间、锁等待时间、发送给客户端的行数、扫描的行数以及导致查询变慢的SQL语句。

查询日志记录所有SQL语句,而慢查询日志仅记录执行时间超过特定阈值的查询。
查询日志通常用于调试和监控,而慢查询日志主要用于性能调优。

在生产环境中,由于性能考虑,一般不建议长期开启查询日志,而慢查询日志则更适合在生产环境中启用以优化性能

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

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

相关文章

STM32 HAL库 SPI驱动1.3寸 OLED屏幕

目录 参考硬件引脚与接线 点亮屏幕CubeMX 配置OLED 驱动程序代码 参考 基于STM32F103C8T6最小系统板HAL库CubeMX SPI驱动7针 OLED显示屏&#xff08;0.96寸 1.3寸通用&#xff09;0.96 oled HAL库驱动 SPI STM32SPI驱动0.96/1.3寸 OLED屏幕&#xff0c;易修改为DMA控制STM32驱…

qt QStatusBar详解

1、概述 QStatusBar是Qt框架提供的一个小部件&#xff0c;用于在应用程序窗口底部显示状态信息。它可以显示一些固定的文本和图标&#xff0c;并且可以通过API动态更新显示内容。QStatusBar通常是一个水平的窗口部件&#xff0c;能够显示多行文本内容&#xff0c;非常适合用于…

h5st参数解析

前言 之前4.8卡我&#xff0c;感觉过了&#xff0c;但是又好像失败了&#xff0c;所以这篇博客憋着没写&#xff0c;这次再次搞了一下&#xff0c;这次弄起来感觉挺简单的啊。 分析 1 20241102203105966; 2 fhhv55ehre91k4l8; 3 f06cc; 4 tk03w…

clickhouse运维篇(二):多机器手动部署ck集群

熟悉流程并且有真正部署需求可以看一下我的另一篇简化部署的文章&#xff0c;因为多节点配置还是比较麻烦的先要jdk、zookeeper&#xff0c;再ck&#xff0c;还有各种配置文件登录不同机器上手动改配置文件还挺容易出错的。 clickhouse运维篇&#xff08;三&#xff09;&#x…

导航栏小案例

实现类似于这样的效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>导航栏</title><style>*{margin: 0;padding: 0;}.div1{width: 100%;height: 60px;/* border: 1px solid blue; */background-color:rgb(…

ASP .NET CORE 6 在项目中集成WatchDog开源项目

概念 WatchDog是一个开源的项目&#xff0c;可以实现对.Net 应用程序和API实现实时应用日志和性能监控平台。可以实现实时记录和查看应用程序中的消息、事件、HTTP请求和响应&#xff0c;以及运行时捕获的异常&#xff0c;有效帮助开发人员去排查应用异常&#xff0c;提升开发效…

四、k8s快速入门之Kubernetes资源清单

kubernetes中的资源 ⭐️ k8s中所有的内容都抽象为资源&#xff0c;资源实列化之后&#xff0c;叫做对象 1️⃣名称空间级别 ⭐️ kubeadm在执行k8s的pod的时候会在kube-system这个名称空间下执行&#xff0c;所以说当你kubectl get pod 的时候是查看不到的查看的是默认的po…

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略&#xff0c;以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法&#xff1a; 一、编队控制方法 领航-跟随法&#xff08;Leader-Follower&#xff09; 通过设定一架无人机作为领航者&#xff08;长机&am…

给大家推荐一本书《GPT时代人类再腾飞》

大家好&#xff0c;我是袁庭新。给大家推荐一本书——《GPT时代人类再腾飞》。 先给大家介绍一位顶级大佬——里德霍夫曼。他是著名互联网企业家&#xff0c;领英联合创始人&#xff1b;知名风险投资者&#xff0c;Open AI早期投资人&#xff1b;《纽约时报》畅销书作者、播客…

法律智能助手:开源NLP系统助力法律文件高效审查与检索

一、系统概述 思通数科AI平台是一款融合了自然语言处理和多标签分类技术的开源智能文档分类工具&#xff0c;特别适用于法律行业。平台采用深度学习的BERT模型来进行特征提取与关系抽取&#xff0c;实现了精准的文档分类和检索。用户可以在线训练和标注数据&#xff0c;使系统…

redis模板的应用:自定义redisTemplate序列化规则 (RedisTemplate和StringRedisTemplate)

文章目录 引言I 基础知识redis对key和value使用序列化方式RedisTemplate<Object, Object>自定义redisTemplate序列化规则RedisTemplate<String, String>II 存储自定义对象redisTemplate存储自定义对象StringRedisTemplate存储自定义对象引言 StringRedisTemplate只…

SQL之排名窗口函数RANK()、ROW_NUMBER()、DENSE_RANK() 和 NTILE() 的区别(SQL 和 Hive SQL 都支持)

现有一张student 表&#xff0c;表中包含id、uname、age、score 四个字段&#xff0c;如下所示&#xff1a; 该表的数据如下所示&#xff1a; 一、ROW_NUMBER() 1、概念 ROW_NUMBER() 为结果集中的每一行分配一个唯一的连续整数&#xff0c;编号从 1 开始。‌ 该函数按照指…

【开源免费】基于SpringBoot+Vue.JS网上超市系统(JAVA毕业设计)

本文项目编号 T 037 &#xff0c;文末自助获取源码 \color{red}{T037&#xff0c;文末自助获取源码} T037&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

mac电脑设置crontab定时任务,以及遇到的问题解决办法

crontab常用命令 crontab -u user&#xff1a;用来设定某个用户的crontab服务&#xff1b; crontab file&#xff1a;file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件&#xff0c;crontab命令将接受标准输入&#xf…

基于vue+neo4j 的中药方剂知识图谱可视化系统

前言 历时一周时间&#xff0c;中药大数据R02系统中药开发完毕&#xff0c;该系统通过scrapy工程获取中药数据&#xff0c;使用python pandas预处理数据生成知识图谱和其他相关数据&#xff0c;利用vuespringbootneo4jmysql 开发系统&#xff0c;具体功能请看本文介绍。 简要…

Qt的程序如何打包详细教学

生成Release版的程序 在打包Qt程序时&#xff0c;我们需要将发布程序需要切换为Release版本&#xff08;Debug为调试版本&#xff09;&#xff0c;编译器会对生成的Release版可执行程序进行优化&#xff0c;使生成的可执行程序会更小。 debug版本 debug版本是一种开发过程中的…

AUTOSAR从入门到精通-BswM模块(二)

目录 前言 算法原理 BswM接口端口 BswM功能描述 模式仲裁 仲裁规则(Arbitration Rules) 模式仲裁来源 模式仲裁过程 模式条件(ModeCondition) 逻辑表达式(LogicExpressions) 模式控制 模式处理 操作执行 模式控制过程 模式控制基本流程 BswM Interfaces and …

【C++题解】1970. 判断是什么字符

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1970. 判断是什么字符 类型&#xff1a;字符串、字符型 题目描述&#xff1a; 从键盘读入一个字符&#xff0c;有可能是大写字母、小写字母、数字中的一种&#xff0c;请编程判断&…

2. Flink快速上手

文章目录 1. 环境准备1.1 系统环境1.2 安装配置Java 8和Scala 2.121.3 使用集成开发环境IntelliJ IDEA1.4 安装插件2. 创建项目2.1 创建工程2.1.1 创建Maven项目2.1.2 设置项目基本信息2.1.3 生成项目基本框架2.2 添加项目依赖2.2.1 添加Flink相关依赖2.2.2 添加slf4j-nop依赖2…

年底和2025年黄金预测:至少3000

黄金价格瞄准$3,000.00关口 过去两年&#xff0c;现货黄金价格一直处于强劲的牛市&#xff0c;从2022年9月的低点上涨了将近70%&#xff0c;达到本周创下的每金衡盎司$2,790.00的历史高点&#xff0c;几乎触及心理关口$2,800.00。 即使出现明显的回撤&#xff0c;只要2024年的…