MySQl之Binlog

news2025/4/3 2:25:00

前言
Binlog(Binary Log)是MySQL中至关重要的日志模块,它直接关系到数据恢复、主从复制等高阶架构设计。无论你是刚入门的新手还是有一定经验的开发者,掌握Binlog的原理和应用都是进阶的必经之路。

BinLog是什么?
Binlog全称Binary Log(二进制日志),以二进制的形式记录所有对数据库的数据修改操作(如DDL、DML),但不会记录单纯的查询(如SELECT)。
它是MySQL服务层的日志(与存储引擎无关),所有引擎的变更操作都会被记录。而事务日志(如InnoDB的Redo Log或Undo Log)则是innoDB引擎层专属。
在这里插入图片描述

Binlog的核心作用

  • 数据恢复:若数据库意外宕机,可通过Binlog重放所有变更操作,恢复至宕机前的状态。
  • 主从复制:主库将Binlog传输给从库,从库重放日志实现数据同步,支撑高可用架构。
    bin log对数据备份、主从、主主等都起到了关键作用。
    在这里插入图片描述

Binlog vs Redo Log:关键区别

对比维度BinlogRedo Log
层级MySQL服务层生成InnoDB存储引擎生成
内容类型逻辑日志(记录SQL逻辑)物理日志(记录数据页修改)
用途数据同步、恢复崩溃恢复,保证事务持久性
写入时机事务提交时一次性写入事务执行中持续写入

Binlog写入机制
写入流程

  • Step 1:事务执行时,Binlog暂存于线程的内存缓存Binlog Cache)。
  • Step 2:事务提交时,缓存数据写入系统缓存(Page Cache)
  • Step 3:根据策略(sync_binlog参数),将Page Cache数据刷盘(fsync)到磁盘。
    在这里插入图片描述

刷盘策略

  • sync_binlog=0:依赖系统自动刷盘(性能高,宕机可能丢数据)。
  • sync_binlog=1:每次提交事务强制刷盘(最安全,性能略低)。
  • sync_binlog=N:累积N个事务后刷盘(平衡安全性与性能)。

redo log在事务执行过程中可以不断写入
bin log只有在提交事务时才写入
假如事务执行update T set c = 1 where id = 2,在写完redo log日志后,bin log日志写期间发生了异常,会出现什么情况呢?
由于bin log没写完就异常,这时候bin log里面没有对应的修改记录。因此,之后用bin log日志恢复数据时,就会少这一次更新,恢复出来的这一行c值为0,而原库因为redo log日志恢复,这一行c的值是1,最终数据不一致

那有什么解决方案吗?二阶段提交方案。
为什么需要两阶段提交?
若Binlog与Redo Log写入不一致(如Binlog未写完时宕机),会导致主从数据差异。
InnoDB通过两阶段提交解决:

  • Prepare阶段:Redo Log标记为“准备中”。
  • Commit阶段:Binlog写入成功后,Redo Log标记为“已提交”。
    若崩溃恢复时发现Redo Log未提交且无对应Binlog,则回滚事务,确保数据一致。
    在这里插入图片描述

Binlog实战:查看与配置
查看日志位置

SHOW VARIABLES LIKE '%log_bin%';  -- 输出日志路径及配置  
SHOW BINARY LOGS;                -- 查看所有Binlog文件列表  

在这里插入图片描述

  • log_bin_basename: 是bin log日志的基本文件名,后面会追加标识来表示每一个文件
  • log_bin_index: 是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录

修改配置(my.cnf)

[mysqld]  
log-bin = /var/lib/mysql/binlog  # 日志存储路径  
binlog_expire_logs_seconds = 604800  # 日志保留7天(单位:秒)  
max_binlog_size = 100M               # 单个日志文件最大100MB 

查看日志内容

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];

示例:

SHOW BINLOG EVENTS IN 'binlog.000001';  -- 解析指定Binlog文件  
  • IN ‘log_name’ :指定要查询的binlog文件名(不指定就是第一个binlog文件)
  • FROM pos :指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
  • LIMIT [offset] :偏移量(不指定就是0)
  • row_count :查询总条数(不指定就是所有行)

Binlog的三种格式

格式特点优点缺点适用场景
Statement(默认)记录原始每一条SQL语句日志量小,节约IO,提高性能sql中存在如now()等依赖环境的函数,会导致主从同步、恢复数据不一致简单SQL,无函数依赖
Row记录每行数据的变更细节(哪一分区、哪一页、哪一行数据)兼容性强,解决Statement模式的缺点一条ID<6000的update会导致同步的log很多,增加磁盘IO、网络带宽开销。复杂操作(如含函数、触发器)
Mixed混合模式优先用Statement,无法保证一致性时自动切换为Row平衡日志量与安全性

总结
Binlog是MySQL数据安全的基石,掌握其原理和配置能助你:

  • 高效实现数据恢复
  • 搭建可靠的主从架构
  • 深入理解MySQL内部机制

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

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

相关文章

开源项目解读(https://github.com/zjunlp/DeepKE)

1.DeepKE 是一个开源的知识图谱抽取与构建工具&#xff0c;支持cnSchema、低资源、长篇章、多模态的知识抽取工具&#xff0c;可以基于PyTorch实现命名实体识别、关系抽取和属性抽取功能。同时为初学者提供了文档&#xff0c;在线演示, 论文, 演示文稿和海报。 2.下载对应的de…

「MethodArgumentTypeMismatchException:前端传递 ‘undefined‘ 导致 Integer 类型转换失败」

遇到的问题&#xff1a; Failed to convert value of type java.lang.String to required type java.lang.Integer; nested exception is java.lang.NumberFormatException: For input string: "undefined" 原因分析&#xff1a; 大致意思就是我传递的参数到后端没…

LabVIEW故障诊断数据处理方法

在LabVIEW故障诊断系统中&#xff0c;数据处理直接决定诊断的准确性和效率。工业现场常面临噪声干扰、数据量大、实时性要求高等挑战&#xff0c;需针对性地选择处理方法。本文结合电机故障诊断、轴承损伤检测等典型案例&#xff0c;详解数据预处理、特征提取、模式识别三大核心…

基于 SpringBoot 的火车订票管理系统

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…

Python的概论

免责声明 如有异议请在评论区友好交流&#xff0c;或者私信 内容纯属个人见解&#xff0c;仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示&#xff1a;&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c…

构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)

本系列文章目录 简介数据准备句子转换器&#xff08;本文&#xff09;向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模型服务高级检索增强生成 RAG 在之前的博客中&#xff0c;我们学习了为RAG&#xff08;检索增强生成&#xff0c;Retrieval Augmented Generati…

怎样提升大语言模型(LLM)回答准确率

怎样提升大语言模型(LLM)回答准确率 目录 怎样提升大语言模型(LLM)回答准确率激励与规范类知识关联类情感与语境类逆向思维类:为什么不,反面案例群体智慧类明确指令类示例引导类思维引导类约束限制类反馈交互类:对话激励与规范类 给予奖励暗示:在提示词中暗示模型如果回…

【进阶】vscode 中使用 cmake 编译调试 C++ 工程

基于 MSYS2 的 MinGW-w64 GCC 工具链与 CMake 构建系统&#xff0c;结合VSCode及其扩展插件&#xff08; ms-vscode.cmake-tools&#xff09;&#xff0c;可实现高效的全流程C开发调试。既可通过 VSCode 可视化界面&#xff08;命令面板、状态栏按钮&#xff09;便捷完成配置、…

流影---开源网络流量分析平台(三)(管理引擎部署)

目录 前沿 功能介绍 部署过程 前沿 在上一篇文章中&#xff0c;最后因为虚拟机的资源而没看到最后的效果&#xff0c;而是查看了日志&#xff0c;虽然效果是有了&#xff0c;但后来我等了很久&#xff0c;还是那个转圈的画面&#xff0c;所以我猜测可能是少了什么东西&#…

QT Quick(C++)跨平台应用程序项目实战教程 5 — 界面设计

目录 1.版面设计 2. 自定义按钮 2.1 自定义工具栏按钮 2.2 自定义图标按钮 3. 顶部工具栏 4. 主体 5. 底部工具栏 6. 主文件 7. 最终效果 上一章内容讲解了QML基本使用方法。本章内容继续延续“音乐播放器”项目主线&#xff0c;完成程序的界面设计任务。 1.版面设计…

【微服务架构】SpringCloud Alibaba(三):负载均衡 LoadBalance

文章目录 SpringCloud Alibaba1、核心组件2、优势3、应用场景 一、Loadbalance介绍二、Ribbon和Loadbalance 对比三、整合LoadBlance1、升级版本2、移除ribbon依赖&#xff0c;增加loadBalance依赖 四、自定定义负载均衡器五、重试机制六、源码分析1、猜测源码的实现2、初始化过…

06-02-自考数据结构(20331)- 查找技术-动态查找知识点

自考数据结构动态查找算法主要讲二叉树和平衡二叉树,但是感觉到了,就又续接了一部分,所以这篇备考的小伙伴着重看前两种就可以了。 知识拓扑 知识点介绍 二叉排序树(BST) 定义 二叉排序树(Binary Search Tree)又称二叉查找树,它或者是一棵空树,或者是具有下列性质的二…

Upload-labs 靶场搭建 及一句话木马的原理与运用

1、phpstudy及upload-labs下载 &#xff08;1&#xff09;下载phpstudy小皮面板 首先需要软件phpstudy 下载地址 phpStudy下载-phpStudy最新版下载V8.1.1.3 -阔思亮 &#xff08;2&#xff09;然后到github网址下载源码压缩包 网址 https://github.com/c0ny1/upload-labs 再…

爬虫的第三天——爬动态网页

一、基本概念 动态网页是指网页内容可以根据用户的操作或者预设条件而实时发生变化的网页。 特点&#xff1a; 用户交互&#xff1a;动态网页能够根据用户的请求而生成不同的内容。内容动态生成&#xff1a;数据来自数据库、API或用户输入。客户端动态渲染&#xff1a;浏览器…

力扣HOT100之矩阵:48. 旋转图像

这道题本来想用剥洋葱的办法的&#xff0c;一直写不对&#xff0c;放弃了。。。直接去看题解&#xff0c;用剥洋葱其实也可以做&#xff0c;就是要从外层处理到内层&#xff0c;每一个边界上的元素为matrix[0].size() - 1个&#xff0c;这样一来&#xff0c;四条边界上的元素个…

uniapp微信小程序获取用户手机号uniCloud云开发版

开发微信小程序&#xff0c;很多时候需要获取用户的手机号&#xff0c;这样方便平台更好的为用户服务&#xff0c;但是微信小程序不允许开发者直接获取用户的手机号&#xff0c;需要用户手动授权才能获取手机号&#xff0c;且需要配合后端进行解密才能获得完整的手机号&#xf…

31天Python入门——第18天:面向对象三大特性·封装继承多态

你好&#xff0c;我是安然无虞。 文章目录 面向对象三大特性1. 封装2. 继承3. 多态4. 抽象基类5. 补充练习 面向对象三大特性 面向对象编程&#xff08;Object-Oriented Programming, 简称OOP&#xff09;有三大特性, 分别是封装、继承和多态.这些特性是面向对象编程的基础, …

第十六届蓝桥杯模拟二(串口通信)

由硬件框图可以知道我们要配置LED 和按键 一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.…

UE5学习笔记 FPS游戏制作32 主菜单,暂停游戏,显示鼠标指针

文章目录 一主菜单搭建UI显示主菜单时&#xff0c;暂停游戏&#xff0c;显示鼠标绑定按钮 二 打开主菜单 一主菜单 搭建UI 添加一个MainUi的控件 添加一个返回游戏的按钮和一个退出游戏的按钮 修改一下样式&#xff0c;放中间 显示主菜单时&#xff0c;暂停游戏&#xff0…

LLM - 开源强化学习框架 OpenR1 的环境配置与训练参数 教程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/146838740 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 OpenR1 是一个开源的强化学习框架,复现 DeepSeek-R1 的训练流程,为研…