当前位置: 首页 > news >正文

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

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

🏠 :小破站

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

  • 前言
  • 第一:事务的生命周期
    • 事务的生命周期
    • Binlog和Redo Log记录事务的一致性和持久性
      • Binlog的记录过程
      • Redo Log的记录过程
      • 一致性和持久性的保障
  • 第二:故障恢复与灾备
    • Binlog与Redo Log的关键作用
      • 1. 故障恢复
        • Binlog的作用
        • Redo Log的作用
      • 2. 灾备计划
        • Binlog的作用
        • Redo Log的作用
    • 最佳实践
      • 1. 定期备份和归档
      • 2. 监控与警报
      • 3. 灾备演练
      • 4. 版本管理与升级
      • 5. 安全性与访问控制
      • 6. 定期审查与更新计划
    • 结论
  • 第三:实战应用场景
    • 1. 数据库恢复和备份策略
      • 场景
      • 实践
    • 2. 主从复制
      • 场景
      • 实践
    • 3. 数据库版本升级
      • 场景
      • 实践
    • 4. 灾备演练
      • 场景
      • 实践
    • 5. 数据库监控与性能优化
      • 场景
      • 实践
    • 6. 安全审计与合规性
      • 场景
      • 实践
  • 总结与建议

前言

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

第一:事务的生命周期

事务的生命周期

  1. 事务的开始(Begin): 事务的生命周期始于用户或应用程序发起事务开始的命令,通常是BEGIN语句。在这一阶段,数据库开始记录所有对数据的修改,但这些修改仍然处于未提交状态。

  2. 执行事务操作: 在事务进行的过程中,数据库引擎会记录所有对数据的修改操作,包括插入、更新、删除等。这些操作在内存中进行,不会立即写入磁盘。

  3. 事务提交(Commit): 当用户或应用程序执行COMMIT语句时,表示事务执行成功,并且数据库引擎将所有在事务中的修改写入磁盘,确保数据的持久性。

  4. 事务回滚(Rollback): 如果在事务执行的过程中出现了错误,用户或应用程序可以执行ROLLBACK语句,撤销所有在事务中的修改,将数据恢复到事务开始前的状态。

Binlog和Redo Log记录事务的一致性和持久性

Binlog的记录过程

  1. 事务开始: 当事务开始时,Binlog记录一个BEGIN事件,表示事务的起始。

  2. 事务执行: 在事务执行期间,Binlog会记录对数据的修改,包括插入、更新、删除等操作。每个操作都会被记录为一个独立的事件。

  3. 事务提交: 当事务提交时,Binlog记录一个COMMIT事件,表示事务成功完成。

  4. 事务回滚: 如果事务回滚,Binlog记录一个ROLLBACK事件,表示事务被撤销。

Redo Log的记录过程

  1. 事务开始: Redo Log记录事务的开始,包括事务ID等信息。

  2. 事务执行: 在事务执行期间,数据库引擎将事务对数据的物理修改记录到Redo Log中。这些记录是物理格式的,包括对数据页的具体修改。

  3. 事务提交: 在事务提交时,Redo Log会记录一个标记事务提交的日志记录。

  4. 事务回滚: 如果事务回滚,Redo Log记录事务的回滚操作,包括对数据页的撤销修改。

一致性和持久性的保障

  1. 一致性: Binlog和Redo Log记录了事务的所有修改操作,包括事务的开始、提交、回滚等事件。通过重放这些日志,可以确保事务的原子性和一致性,即事务要么完全执行,要么完全不执行。

  2. 持久性: 当事务提交时,Binlog和Redo Log的记录会被写入磁盘,确保事务的持久性。即使在事务提交后发生故障,可以通过重放这些日志来还原数据,维护数据库的一致性。

Binlog和Redo Log的设计和记录机制是数据库引擎保障事务的一致性和持久性的重要手段。它们的协同工作确保了数据库在各种场景下的可靠性和可恢复性。

第二:故障恢复与灾备

Binlog与Redo Log的关键作用

1. 故障恢复

Binlog的作用
  • 历史变更记录: Binlog记录了数据库的历史更改,包括每个事务的详细操作。这使得在数据库发生故障后,可以通过重放Binlog来还原数据库到故障发生前的状态。
  • 数据完整性: 在故障后,通过分析Binlog,可以确定哪些事务已经提交,哪些事务未提交,从而确保数据的完整性和一致性。
Redo Log的作用
  • 持久性和一致性: Redo Log记录了事务对数据库进行的物理修改。在数据库崩溃后,通过重放Redo Log,可以确保已提交的事务的物理修改被应用,维护事务的持久性和一致性。

2. 灾备计划

Binlog的作用
  • 数据同步: 在灾备情境中,主数据中心的Binlog可以用于实时同步到备用数据中心。备用数据中心通过读取主数据中心的Binlog,保持数据的实时同步,确保备用数据中心是最新的。
Redo Log的作用
  • 数据完整性: 在灾备过程中,Redo Log对于恢复事务的物理修改至关重要。它确保备用数据中心可以通过重放Redo Log来还原事务的修改,从而维护数据的完整性。

最佳实践

1. 定期备份和归档

  • 定期备份: 针对Binlog和Redo Log,建立定期的备份策略。这包括定期将Binlog备份到安全的位置,以及对数据库进行完整备份。这确保了在发生故障时有可靠的备份数据可用。
  • 归档策略: 对于Binlog,建立合理的归档策略,确保历史变更记录的长期保存。这对于长期数据分析和合规性要求至关重要。

2. 监控与警报

  • 实时监控: 建立实时监控系统,监控Binlog和Redo Log的写入和同步状态。任何异常都应该触发警报,以便及时发现问题并采取措施。
  • 性能监控: 监控Binlog和Redo Log的性能,包括写入延迟、磁盘空间使用等。通过性能监控,可以及时发现潜在的性能问题并进行优化。

3. 灾备演练

  • 定期演练: 定期进行灾备演练,验证备用数据中心的可用性和数据一致性。这有助于发现潜在问题,并确保在真实的灾难情境中能够快速、可靠地切换到备用数据中心。

4. 版本管理与升级

  • 版本一致性: 确保主数据中心和备用数据中心的数据库引擎版本一致。不同版本的Binlog和Redo Log可能具有不同的格式和功能,版本一致性有助于保障数据同步的可靠性。
  • 定期升级: 定期升级数据库引擎,以获得最新的安全性和性能优化。升级前进行全面的测试,确保新版本与灾备计划兼容。

5. 安全性与访问控制

  • 加密和安全传输: 对于Binlog和Redo Log的传输,采用加密手段确保数据的安全传输。配置安全传输协议,如SSL/TLS,以保护数据在传输过程中的安全性。
  • 访问控制: 限制对Binlog和Redo Log的访问权限。只有授权的用户才能访问这些关键的日志文件,以防止未经授权的修改或泄露。

6. 定期审查与更新计划

  • 定期审查: 定期审查灾备计划和故障恢复策略。随着业务的变化和数据库规模的扩大,灾备计划和恢复策略可能需要进行调整和更新。
  • 技术更新: 跟踪数据库引擎和相关技术的更新,了解新的安全修复和性能优化。在必要时更新数据库引擎和相关组件。

结论

Binlog和Redo Log作为数据库引擎的关键组件,在故障恢复和灾备中发挥着至关重要的作用。通过

合理的最佳实践,包括定期备份、监控与警报、灾备演练、版本管理与升级、安全性与访问控制、定期审查与更新计划等,可以确保数据库系统在面对故障和灾备时能够快速、可靠地保持数据的安全和可靠性。这些实践应该被视为数据库管理中的标准操作,以建立稳健的数据恢复和灾备机制。

第三:实战应用场景

1. 数据库恢复和备份策略

场景

公司数据库出现了一次数据错误的情况,需要将数据库还原到前一天的状态。同时,要求最小化业务中断时间。

实践

  1. Binlog应用: 利用Binlog,可以找到目标时间点的Binlog文件,通过重放这些Binlog来还原数据库到指定时间点。
  2. Redo Log应用: 在进行数据库还原前,确保Redo Log的备份完整。在还原过程中,重放Redo Log以保障已提交事务的物理修改。

2. 主从复制

场景

公司业务需要读写分离,同时在备用服务器上实现数据冗余备份。要求主从服务器之间数据同步,并确保主服务器宕机时能够无缝切换到从服务器。

实践

  1. Binlog应用: 主服务器将所有更改记录到Binlog中,从服务器通过读取主服务器的Binlog并执行相同的更改来保持数据同步。
  2. Redo Log应用: 从服务器在执行Binlog中的更改时,重放Redo Log以确保事务的一致性。

3. 数据库版本升级

场景

公司决定升级数据库引擎版本以获得性能提升和新的功能。需要在升级过程中最小化数据丢失和系统停机时间。

实践

  1. Binlog应用: 在升级前,进行全量备份并确保Binlog的完整性。在升级过程中,通过重放Binlog还原到升级前的状态,以最小化数据丢失。
  2. Redo Log应用: 在升级过程中,重放Redo Log以确保已提交事务的物理修改被应用,维持事务的一致性。

4. 灾备演练

场景

公司定期进行灾备演练,以验证备用数据中心的可用性和数据一致性。

实践

  1. Binlog应用: 在灾备演练前,确保主数据中心的Binlog可以成功传输到备用数据中心,以保持数据同步。
  2. Redo Log应用: 在灾备演练中,通过重放Redo Log还原事务的物理修改,验证备用数据中心的数据完整性。

5. 数据库监控与性能优化

场景

公司数据库出现了性能问题,需要进行性能监控和优化。

实践

  1. Binlog应用: 在性能监控中,通过分析Binlog,可以了解数据库的历史变更和事务执行情况,有助于识别潜在的性能瓶颈。
  2. Redo Log应用: 在性能优化过程中,通过重放Redo Log,可以评估事务的物理修改对性能的影响,并进行相应的调整。

6. 安全审计与合规性

场景

公司需要满足法规对数据库安全审计和合规性的要求,确保敏感数据的安全性。

实践

  1. Binlog应用: 通过分析Binlog,可以追踪数据库中敏感数据的访问记录,进行安全审计,以满足合规性要求。
  2. Redo Log应用: 在合规性要求中,重放Redo Log可以确保已提交事务的物理修改得到正确的记录,提高数据安全性。

总结与建议

在日常数据库管理中,Binlog和Redo Log是强大的工具,它们不仅在故障恢复和灾备中发挥着关键作用,也在主从复制、数据库升级、性能优化、合规性要求等方面提供了实际应用的解决方案。合理利用它们,结合数据库管理的最佳实践,能够确保数据的安全、一致性和可靠性。定期进行备份、监控性能、定期演练灾备计划等措施都是日常管理中的关键步骤,通过这些实践,数据库管理员能够更好地应对各种挑战,保障业务的正常运行。

相关文章:

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

🎏:你只管努力,剩下的交给时间 🏠 :小破站 Binlog vs. Redo Log:数据库日志的较劲【高级】 前言第一:事务的生命周期事务的生命周期Binlog和Redo Log记录事务的一致性和持久性Binlog的记录过程R…...

移动机器人路径规划(二)--- 图搜索基础,Dijkstra,A*,JPS

目录 1 图搜索基础 1.1 机器人规划的配置空间 Configuration Space 1.2 图搜索算法的基本概念 1.3 启发式的搜索算法 Heuristic search 2 A* Dijkstra算法 2.1 Dijkstra算法 2.2 A*&&Weighted A*算法 2.3 A* 算法的工程实践中的应用 3 JPS 1 图搜索基础 1.1…...

消息中间件——RabbitMQ(四)命令行与管控台的基本操作!

前言 在前面的文章中我们介绍过RabbitMQ的搭建:RabbitMQ的安装过以及各大主流消息中间件的对比:,本章就主要来介绍下我们之前安装的管控台是如何使用以及如何通过命令行进行操作。 1. 命令行操作 1.1 基础服务的命令操作 rabbitmqctl sto…...

性能压测工具:wrk

一般我们压测的时候,需要了解衡量系统性能的一些参数指标,比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线:P95。平均100%的请求中95%已经响应的时间 99线:P99。平均100%的请求中99%已经响应的时间 平…...

[Matlab有限元分析] 2.杆单元有限元分析

1. 一维杆单元有限元分析程序 一维刚单元的局部坐标系(单元坐标系)与全局坐标系相同。 1.1 线性杆单元 如图所示是一个杆单元,由两个节点i和j,局部坐标系的X轴沿着杆的方向,由i节点指向j节点,每个节点有…...

透过对话聊天聊网络tcp三次握手四次挥手

序 说起来网络,就让我想起的就是一张图。我在网上可以为所欲为,反正你又不能顺着网线来打我。接下来我们来详细说一下网络到底是怎么连接的。 TCP三次打招呼 首先我会用男女生之间的聊天方式,来举一个例子。 从tcp三次握手来说,…...

项目管理套路:看这一篇绝对够用❤️

写论文必不可少的,就是创建代码并进行实验。好的项目管理可以让实验进行得更加顺利。本篇博客以一次项目实践为例,介绍项目管理的方法,以及可能遇到的问题,并提供一些可行的解决方案。 目录 项目管理工具开始第一步版本管理十分关…...

华为-算法---测试开发工程师----摘要牛客网

Java面试题---摘要牛客网-CSDN博客package extendNiuKeWang;import java.util.Scanner;public class GoodHuaWei {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int money = sc.nextInt();System.out.println("n值总金额:"+money)…...

python环境搭建-yolo代码跑通-呕心沥血制作(告别报错no module named torch)

安装软件 安装过的可以查看有没有添加环境变量 好的! 我们发车! 如果你想方便快捷的跑通大型项目,那么必须安装以下两个软件: 1.pycharm2.anaconda对应作用: pycharm:专门用来跑通python项目的软件,相当于一个编辑器,可以debug调试,可以接受远程链接调试!anaconda:专…...

Cisco Packet Tracer配置命令——路由器篇

路由基础 路由器用于互联两个或多个网络,具有两项功能:为要转发的数据包选择最佳路径以及将数据包交换到正确的端口,概括为路由选择和分组转发。 路由选择 路由选择就是路由器根据目的IP地址的网络地址部分,通过路由选择算法确…...

setContentsMargins(QMargins()) 是 QWidget 类的成员函数,用于设置小部件的内容边距(Contents Margins)

setContentsMargins(QMargins()) 是 QWidget 类的成员函数,用于设置小部件的内容边距(Contents Margins)。 在 Qt 中,内容边距指的是小部件内部内容与小部件边界之间的空白区域。通过设置内容边距,可以控制和调整小部…...

Redis key 过期监听实现

1.技术背景,想知道 redis 设置了TTL时间的key 过期,且有后续的业务处理的场景可以使用。 bug点: 使用redis 缓存失效监听会有一定的延迟, 过期事件是在redis服务器删除键的时候生成的,而不是在理论上生存时间到达0值得…...

Gee教程2.上下文Context

先来看看Gin框架的简单例子 func main() {engine : gin.Default()engine.GET("/", func(c *gin.Context) {c.String(http.StatusOK, "hello World!")})//监听并启动服务,默认 http://localhost:8080/engine.Run() }//我们自己写的 func main()…...

【从浅识到熟知Linux】基本指定之cat、more和less

🎈归属专栏:从浅学到熟知Linux 🚗个人主页:Jammingpro 🐟每日一句:写完这篇我要去吃晚饭啦!! 文章前言:本文介绍cat、more和less指令三种查看文件的用法并给出示例和截图…...

2018年7月24日 Go生态洞察:Go Cloud实现便携式云编程

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

storyBook常见踩坑报错 和 解决

用StoryBook官网的代码&#xff0c;但报错&#xff0c;Unexpected token’<’ 在js文件中// Button.stories.js|jsx import { Button } from ‘./Button’; export default { component: Button, }; /* *&#x1f447; Render functions are a framework specific featur…...

python 笔记 根据用户轨迹+基站位置,估计基站轨迹+RSRP

1 问题描述 已知用户实际的轨迹&#xff0c;和基站的位置&#xff0c;能不能得到用户所连接的基站&#xff0c;以及基站的信号强度RSRP&#xff1f; 1.1 几个假设 这里我们做几个假设&#xff1a; 每个用户有80%的概率连接最近的基站&#xff0c;有20%的概率选择其他的基站连…...

RocketMQ 安装部署及应用场景记录

文章目录 前言一、RocketMQ简介1.1 整体架构 二、RocketMQ安装部署2.1 RocketMQ 下载2.2 修改 JVM 参数2.3 启动 NameServer 和 Broker2.4 验证发送和接受消息2.5 停止 NameServer 和 Broker2.6 配置全局环境 三、RocketMQ应用场景3.1 异步处理3.2 应用解耦3.3 流量削峰 前言 …...

人工智能面面观

人工智能简介 人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;是一门研究如何使计算机能够模拟和执行人类智能任务的科学和技术领域。它致力于开发能够感知、理解、学习、推理、决策和与人类进行交互的智能系统。人工智能的背景可以追溯到上世纪50…...

vue-router的使用技巧

一、安装 npm install vue-router 二、引入 main.ts引入 import { createApp } from vue import App from ./App.vue import router from ./routerconst app createApp(App)app.use(router) app.mount(#app)三、定义路由文件 路由的参数 meta添加路由的其他参数 redire…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

算法250609 高精度

加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...