Binlog vs. Redo Log:数据库日志的较劲【基础】

🎏:你只管努力,剩下的交给时间

🏠 :小破站

Binlog vs. Redo Log:数据库日志的较劲

  • 前言
  • 第一:Binlog与Redo Log的基础概念
    • Binlog(二进制日志)的基础概念
    • Redo Log(重做日志)的基础概念
    • 在数据库事务中的重要性
  • 第二:结构对比
    • Binlog(二进制日志)的内部结构
    • Redo Log(重做日志)的内部结构
    • 差异对比
  • 第三:功能差异
    • Binlog(二进制日志)的功能
    • Redo Log(重做日志)的功能
    • 在事务提交、回滚和数据恢复中的作用对比
      • Binlog
      • Redo Log
  • 第四:性能影响与优化
    • 性能影响与优化
      • Binlog对数据库性能的影响
      • Redo Log对数据库性能的影响
    • 优化策略
      • Binlog的优化策略
      • Redo Log的优化策略
    • 通用性能优化策略

前言

在数据库的舞台上,有两位不可或缺的明星,它们分别是Binlog和Redo Log。就像是数据库的两条骨干,它们默默地记录着每一个数据变动的瞬间。今天,我们将揭开它们的神秘面纱,探讨它们在数据库事务中的独特角色,看看究竟是Binlog还是Redo Log更加强大。

第一:Binlog与Redo Log的基础概念

Binlog(二进制日志)的基础概念

  1. 定义和作用: Binlog是MySQL中的二进制日志,记录了对数据库进行更改的所有事件。它包含了对数据的插入、更新、删除等操作的详细信息。Binlog的主要作用是用于数据恢复、主从复制和点对点复制。

  2. 数据恢复: Binlog记录了数据库的历史更改,可以用于数据恢复。通过重放Binlog中的事件,可以将数据库还原到特定的时间点。

  3. 主从复制: 在主从复制中,主服务器将所有的更改记录到Binlog中,而从服务器则通过读取主服务器的Binlog并执行相同的更改来保持数据同步。

  4. 点对点复制: 类似于主从复制,但点对点复制允许多个服务器之间相互复制数据,而不仅限于主从关系。

Redo Log(重做日志)的基础概念

  1. 定义和作用: Redo Log是数据库引擎内部的日志,用于记录对数据库进行的修改。它的主要作用是确保事务的持久性和一致性。

  2. 持久性: 在事务提交之前,数据库引擎将事务对数据的修改记录到Redo Log中。这样,即使在事务提交后发生故障,可以通过重放Redo Log来还原数据。

  3. 事务一致性: Redo Log确保事务的原子性。在事务提交前,引擎会先将事务的修改写入Redo Log,然后再将修改应用到实际的数据文件中。

  4. 崩溃恢复: 在数据库崩溃后,通过重放Redo Log,可以将已提交的事务重新应用到数据文件,确保数据库在崩溃后仍然保持一致。

在数据库事务中的重要性

  1. 事务原子性: Binlog和Redo Log都是支持事务原子性的关键组件。它们确保事务要么完全执行,要么完全不执行。

  2. 持久性: Redo Log的存在确保了事务的持久性。即使在事务提交后,数据修改可能还未写入实际的数据文件,但通过Redo Log可以进行恢复。

  3. 数据库复制: Binlog和Redo Log在数据库复制中发挥着重要作用。通过记录并复制对数据的修改,可以实现主从复制和点对点复制,确保多个服务器之间数据的一致性。

  4. 数据恢复: 在发生故障或人为错误时,Binlog和Redo Log记录的历史更改可以用于恢复数据库到先前的状态。

在数据库事务中,Binlog和Redo Log的协同作用确保了数据的一致性、可靠性和可恢复性。它们是数据库引擎保障事务执行和数据完整性的关键机制。

第二:结构对比

Binlog(二进制日志)的内部结构

  1. 记录格式: Binlog的记录格式通常为二进制格式,以提高效率。每个Binlog事件包含了对数据库进行修改的详细信息,如表名、操作类型、修改前后的数据等。

  2. 存储方式: Binlog以文件的形式存储在磁盘上。每个Binlog文件可以包含多个事件,文件会定期轮转以避免文件过大。Binlog文件的路径和命名方式在MySQL的配置中指定。

  3. 事件类型: Binlog中的事件类型包括但不限于Query事件、TableMap事件、WriteRows事件、UpdateRows事件、DeleteRows事件等,每个事件负责记录一类数据库操作。

  4. 位置标识: Binlog中的每个事件都有一个唯一的位置标识,称为Log Sequence Number(LSN),用于标识事件在Binlog中的位置。LSN是一个递增的数字。

Redo Log(重做日志)的内部结构

  1. 记录格式: Redo Log的记录格式通常是物理格式,记录了对数据库页的物理修改。每个Redo Log记录包含了一个事务的一系列修改。

  2. 存储方式: Redo Log以循环缓冲区的形式存储在磁盘上。在InnoDB引擎中,Redo Log分为多个组,每个组包含多个文件。Redo Log文件的大小和数量在MySQL的配置中指定。

  3. 事务标识: Redo Log中的每个记录都与一个事务相关联,有一个唯一的事务ID。这有助于恢复时区分不同的事务。

  4. 位置标识: Redo Log中的每个记录也有一个唯一的位置标识,通常是一个组号和偏移量的组合。这用于标识记录在Redo Log中的位置。

差异对比

  1. 抽象层次: Binlog记录的是逻辑层面的更改,包含对数据库的高层次操作;而Redo Log记录的是物理层面的更改,关注的是对页的修改。

  2. 存储方式: Binlog以文件形式存储,每个文件包含多个事件;Redo Log以循环缓冲区和多个组的形式存储,通过循环写入和轮换来保证循环使用。

  3. 记录的粒度: Binlog的事件粒度更细,每个事件对应一个高层次的数据库操作;Redo Log的记录粒度更大,一个Redo Log记录可能包含多个页面的修改,对应一个或多个事务。

  4. 使用场景: Binlog主要用于数据恢复、主从复制、点对点复制等高级功能;Redo Log主要用于崩溃恢复、确保事务的原子性和一致性。

虽然Binlog和Redo Log在实现细节上有一些差异,但它们都是确保数据库事务一致性和可恢复性的重要组成部分。它们的协同工作确保了数据库的持久性,使得在故障发生时能够安全地进行恢复。

第三:功能差异

Binlog(二进制日志)的功能

  1. 数据恢复: Binlog记录了数据库的历史更改,可用于数据恢复。通过重放Binlog中的事件,可以将数据库还原到特定的时间点。

  2. 主从复制: Binlog在主从复制中发挥关键作用。主服务器将所有更改记录到Binlog中,而从服务器通过读取主服务器的Binlog并执行相同的更改来保持数据同步。

  3. 点对点复制: 类似于主从复制,但点对点复制允许多个服务器之间相互复制数据,而不仅限于主从关系。

  4. 增量备份: Binlog的内容可用于增量备份,只备份自上次完整备份以来的更改,减少备份时间和存储空间。

Redo Log(重做日志)的功能

  1. 崩溃恢复: Redo Log用于崩溃恢复,确保已提交的事务在数据库崩溃后能够重新应用,维护事务的一致性。

  2. 事务的原子性: Redo Log记录事务对数据的物理修改,确保事务的原子性。在事务提交前,Redo Log中会记录相应的物理修改。

  3. 持久性: Redo Log的存在保证了事务的持久性。即使在事务提交后,数据的物理修改可能还未写入实际的数据文件,但通过Redo Log可以进行恢复。

在事务提交、回滚和数据恢复中的作用对比

Binlog

  1. 事务提交: 在事务提交时,Binlog会记录对数据库的更改,确保事务的原子性和一致性。

  2. 事务回滚: Binlog中不会记录事务回滚的信息。回滚通常通过撤销对数据的修改来完成。

  3. 数据恢复: Binlog是用于数据恢复的关键工具。通过重放Binlog,可以将数据库还原到特定的时间点,应对故障和数据损坏。

Redo Log

  1. 事务提交: 在事务提交时,Redo Log会记录对数据页的物理修改,确保事务的原子性和持久性。

  2. 事务回滚: Redo Log中记录的是对数据页的物理修改,因此可以用于事务回滚。通过重放Redo Log,可以取消对数据的物理修改。

  3. 数据恢复: Redo Log在数据库崩溃后用于崩溃恢复。通过重放Redo Log,可以将已提交的事务重新应用到数据文件中,确保数据库在崩溃后仍然一致。

总体而言,Binlog和Redo Log在数据库引擎中有着不同的功能,但它们共同确保了事务的一致性、原子性和可恢复性。它们是数据库引擎实现事务处理的重要组成部分。

第四:性能影响与优化

性能影响与优化

Binlog对数据库性能的影响

  1. 写入开销: Binlog记录所有对数据库的更改,这会引入写入开销。在高写入负载下,Binlog的写入操作可能成为性能瓶颈。

  2. 磁盘空间: Binlog文件会占用磁盘空间,特别是在高写入负载下。大的Binlog文件可能导致磁盘空间不足,影响性能。

  3. 同步延迟: 在主从复制中,从服务器需要读取主服务器的Binlog并应用相同的更改。如果主服务器上的Binlog写入较慢,可能导致从服务器的同步延迟。

Redo Log对数据库性能的影响

  1. 写入开销: Redo Log的写入是一个频繁的操作,因为每个事务提交都会生成Redo Log记录。在高写入负载下,这可能成为性能瓶颈。

  2. 同步延迟: Redo Log的写入和同步操作可能导致事务提交时的延迟,特别是在同步到磁盘的过程中。

优化策略

Binlog的优化策略

  1. 选择合适的日志格式: Binlog支持多种格式,包括statement、row和mixed。选择合适的日志格式可以根据应用程序的特性来优化性能。

  2. 调整同步策略: 考虑通过配置同步策略来优化性能。例如,可以将sync_binlog参数设置为较大的值,以减少同步到磁盘的频率。

  3. 增量备份优化: 如果只需备份增量数据,可以定期将Binlog进行备份,而不是备份整个数据库。

  4. 合理设置Binlog文件大小: 控制Binlog文件的大小,避免文件过大。较小的Binlog文件有助于更快地进行轮转和管理。

Redo Log的优化策略

  1. 调整Redo Log文件大小: 控制Redo Log文件的大小,以平衡写入性能和磁盘空间的利用率。可以根据实际负载情况调整innodb_log_file_size参数。

  2. RAID配置优化: 使用RAID来提高Redo Log的写入性能。选择RAID级别和磁盘类型以适应写入负载。

  3. 设置适当的缓冲池大小: 通过调整innodb_log_buffer_size参数来控制Redo Log的缓冲池大小,以平衡性能和内存使用。

  4. 使用SSD: 在高写入负载下,使用SSD来存储Redo Log文件可以提高写入性能。

  5. 合理配置同步策略: 根据性能需求调整同步策略,例如通过调整innodb_flush_log_at_trx_commit参数。

通用性能优化策略

  1. 硬件升级: 升级硬件,包括磁盘、内存和CPU,以提高整体性能。

  2. 合理配置缓存: 根据实际负载和硬件情况,合理配置数据库引擎的缓存,如InnoDB缓冲池。

  3. 定期监控和调整: 定期监控数据库性能,使用性能分析工具,根据实际负载调整数据库引擎参数。

  4. 合理设计数据库表结构: 良好的数据库表设计可以减少写入冲突,降低Redo Log的压力。

  5. 异步写入: 考虑将Binlog和Redo Log的写入操作设置为异步,以减少写入时的开销。

  6. 使用数据库连接池: 使用连接池管理数据库连接,以减少连接的创建和销毁开销。

综合考虑Binlog和Redo Log的优化策略,需要根据具体的数据库负载、硬件环境和性能需求进行调整。不同的数据库引擎和版本可能有不同的优化参数和策略。

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

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

相关文章

IIC驱动OLED(SSD1306) HAL库+CubeMX

一.IIC传输数据的格式 1.写操作 2.读操作 3.IIC信号 二. IIC底层驱动 1.重新初始化配置延时单元 //软件延时 void I2C_Delay(uint32_t t) {volatile uint32_t tmp t;while(tmp--); }void I2C_GPIO_ReInit(void) {/* 1. 使用结构体定义硬件GPIO对象 */GPIO_InitTypeDef GPIO…

安装最新版WebStorm来开发JavaScript应用程序

安装最新版WebStorm来开发JavaScript应用程序 Install the Latest Version of JetBrains WebStorm to Develop JavaScript Applications By JacksonML 2023-11-25 1. 系统要求 WebStorm是个跨平台集成开发环境(IDE)。按照JetBrains官网对WebStorm软件…

【C++】类型转换 ② ( C++ 静态类型转换 static_cast | C 语言隐式转换弊端 | 代码示例 )

文章目录 一、静态类型转换 static_cast1、C 静态类型转换 static_cast2、C 语言隐式转换弊端3、代码示例 在之前写过一篇 C 类型转换的博客 【C 语言】类型转换 ( 转换操作符 | const_cast | static_cast | dynamic_cast | reinterpret_cast | 字符串转换 ) , 简单介绍了 C 类…

大数据基础 HDFS客户端操作

一、Maven概述 Maven是一个专门用于管理和构建Java项目的工具。我们之所以要使用Maven,是因为Maven可以为我们提供一套标准化的项目结构、一套标准化的构建流程和一套方便的依赖管理机制,这些功能可以使得我们的项目结构更加清晰,导入jar包的…

初学vue3与ts:setup与setup()下的数据写法

把setup写在script里 <template><div><div class"index-title">script setup</div><div class"title">字符串&#xff1a;</div><div class"title-sub">ref版&#xff1a;{{strRef}}</div><…

arduino库之:sevseg库说明文档

该库将您的 Arduino 变成一个七段显示控制器。使用它可以轻松地在七段显示器上显示数字&#xff0c;无需任何额外的控制器。该库不支持移位寄存器。 支持&#xff1a; Arduino 连接 所有数字引脚都可以连接到Arduino的任何数字引脚&#xff0c;或具有数字支持的模拟引脚&#…

cocos游戏引擎制作的滚动框地图防止误点操作的简单方法

本篇文章主要讲解&#xff0c;使用cocos creator 来解决在我们日常滚动框开发中&#xff0c;滚动和触摸存在冲突的情况&#xff0c;导致的误触行为的解决办法。 日期&#xff1a;2023年11月25日 具体事项 说明&#xff1a;在我们滚动滚动框时&#xff0c;会出现误点的情况&…

Drools 7 JMX Mbean 及Metric 分析

Mbean mbean的打开很简单&#xff0c;使用jmx启动参数&#xff1a; -Dcom.sun.management.jmxremote.port9999 -Ddrools.mbeansenabled -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse 但通过jconsole能直观看到的东西也很…

代码随想录-刷题第八天

344. 反转字符串 题目链接&#xff1a;344. 反转字符串 思路&#xff1a;让第一个和最后一个交换位置&#xff0c;第二个和倒数第二个交换位置&#xff0c;依次类推。 时间复杂度O(n)&#xff0c;空间复杂度O(1) class Solution {public void reverseString(char[] s) {// …

Vaex助力高效处理大规模数据集

大家好&#xff0c;在数据科学中&#xff0c;高效处理大规模数据集一直是个挑战。Vaex是一个功能强大的Python库&#xff0c;旨在通过提供快速且内存高效的数据操作和分析功能来解决这个问题。本文将探讨Vaex的实际应用&#xff0c;并展示如何简化工作流程。 1.惰性计算 Vaex…

利用 LD_PRELOAD 环境变量

文章目录 原理LD_PRELOAD介绍如何上传.so文件 例题 [虎符CTF 2022]ezphp 原理 LD_PRELOAD介绍 LD_PRELOAD是Linux系统的一个环境变量&#xff0c;它可以影响程序的运行时的链接&#xff08;Runtime linker&#xff09;&#xff0c;它允许你定义在程序运行前优先加载的动态链接…

【2023.11.26】Mybatis自定义映射规则学习

创建自定义映射规则 <select id"selectArtist" resultMap"test">select * from artist </select> 在SQL语句标签中将resultType修改为resultMap&#xff0c;即自定义映射的id。 编写自定义映射规则&#xff1a; <resultMap id"tes…

Linux - 系统调用(syscall)

说明 基于riscv64 soc linux_5.10.4平台&#xff0c;通过新增一个系统调用深入了解下系统调用实现原理。 简介 Linux 软件运行环境分为用户空间和内核空间&#xff0c;默认情况下&#xff0c;用户进程无法访问内核&#xff0c;既不能访问内核所在的内存空间&#xff0c;也不…

从范式标准谈一下OLTP和OLAP的区别

背景 在传统的OLAP和OLTP数据库的主要差别中&#xff0c;我们从数据组积的抽象层面看下两者的区别 范式上的区别 传统的OLTP数据库和OLAP数据库的在范式上重要的差异&#xff0c;传统的OLTP数据库是为进行事务处理服务的&#xff0c;其表结构遵循E-R关系模型&#xff0c;并且…

深入了解Java中SQL优化的关键技巧与实践

引言 介绍SQL优化对于Java应用性能的重要性&#xff0c;并概述本文将要讨论的内容。 1. 编写高效的SQL语句 - **索引的类型与使用&#xff1a;** 解释B-Tree索引、哈希索引等类型的区别&#xff0c;以及如何根据查询需求合理创建和使用索引。 - **查询优化器&#xff1a;** 说明…

【全栈开发】全栈开发框架/库

blitz https://github.com/blitz-js/blitzNext.js缺少的Fullstack工具包Blitz继承了Next.js的不足&#xff0c;为全球应用程序的交付和扩展提供了经过战斗测试的库和约定。 Redwoodjs https://github.com/redwoodjs/redwood初创企业应用程序框架Redwood是一个固执己见的、全…

python 点云las生成深度图

一、代码实现 import laspy import cv2 import numpy as np import matplotlib.pyplot as plt# 相机内参 CAM_WID, CAM_HGT = 475, 475 # 深度图尺寸 CAM_FX, CAM_FY = 5.2640790081811531e+02, 5.2616047137164196e+02 # fx/fy

DDD落地:从阿里单据系统,看DDD在大厂如何落地?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&#x…

职场份子钱随不随?这20个真相你需要知道!

职场份子钱随不随&#xff1f;这20个真相你需要知道&#xff01; 1.千万不要在老婆面前夸小姨子水灵。 2.盖世功劳&#xff0c;当不得一个矜字&#xff1b;弥天罪过&#xff0c;当不得一个悔字。 3.愚蠢的人永远只会根据答案判断难度。 4.改变自己的是神&#xff0c;企图改…

【数据库】表的连接在执行时的算法解析,嵌套循环连接算法的几种实现,多表连接中表的数量会影响什么

嵌套循环连接 ​专栏内容&#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发&#xff0c;开发的步骤&#xff0c;以及开发过程中的涉及的原理&#xff0c;遇到的问题等&#xff0c;让大家能跟上并且可以一起开发&#xff0c;让每个需要的人成为参与者。 本专栏会定期更新…