硬核干货,带你一文掌握 MySQL 的binlog 、redo log、undo log

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

​hello,大家好。

在MySQL 中我们经常会接触到三个核心日志,它们分别是:binlog 、redo log、undo log。

好多同学对于它们可能并不陌生,但是具体区分起来各自的功能用途以及实现原理,那可能认知就会比较模糊了,今天就跟大家一起,来清晰明了的介绍一下这些日志的核心思想和功能原理。

1 binlog

1.1 binlog 设计目标

binlog 记录了对MySQL数据库执行更改的所有的写操作,包括所有对数据库的数据、表结构、索引等等变更的操作。

注意:这其中不包含SELECT、SHOW等,因为对数据没有修改

只要是对数据库有变更的操作都会记录到binlog里面来,我们可以把数据库的数据看做银行账户里的余额,而binlog就相当于我们银行卡的流水记录。账户余额只是一个结果,至于这个结果怎么来的,那就必须得看流水了。

在实际应用中, binlog 的主要应用场景分别是 主从复制 和 数据恢复。

  1. 主从复制 :在 Master 端开启 binlog ,然后将 binlog 发送到各个 Slave 端, Slave 端重放 binlog 来达到主从数据一致。

  2. 数据恢复 :通过使用 mysqlbinlog 工具来恢复数据。

1.2 binlog 数据格式

binlog 日志有三种格式,分别为 STATMENT 、 ROW 和 MIXED。

在 MySQL 5.7.7 之前,默认的格式是 STATEMENT , MySQL 5.7.7 之后,默认值是 ROW。日志格式通过 binlog-format 指定。

  • ROW:基于行的复制(row-based replication, RBR),不记录每条SQL语句的上下文信息,仅需记录哪条数据被修改了。如果一个update语句修改一百行数据,那么这种模式下就会记录100行对应的记录日志。

  • 优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题;

  • 缺点:会产生大量的日志,尤其是 alter table 的时候会让日志暴涨。

  • STATMENT:基于SQL语句的复制( statement-based replication, SBR ),每一条会修改数据的SQL语句会记录到 binlog 中 。相对于ROW模式,STATEMENT模式下只会记录这个 update 的语句,所以此模式下会非常节省日志空间,也避免着大量的IO操作。

  • 优点:不需要记录每一行的变化,减少了 binlog 日志量,节约了 IO , 从而提高了性能;

  • 缺点:在某些情况下会导致主从数据不一致,比如执行sysdate() 、 slepp() 等 。

  • MIXED:基于 STATMENT 和 ROW 两种模式的混合复制(mixed-based replication, MBR),一般的复制使用 STATEMENT 模式保存 binlog ,对于一些函数,STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog。

基于这三种模式需要注意的是:

1)使用 row 格式的 binlog 时,在进行数据同步或恢复

Python+gensim【中文LDA】简洁模型 文章目录完整代码过程详解words_lsdictionarydictionary.doc2bow函数corpuslda 完整代码 from gensim import corpora, models import jieba.posseg as jp # 待分析文本集 text1 = '美国教练坦言,没输给中国女排,是输给了郎平' text2 = '中国女排世界排名第一?真实水平如何,听听巴西和美... 阅读详情

相关推荐

基于大模型的围术期谵妄防控系统研究报告

围术期谵妄是一种急性脑功能障碍综合征,通常发生在手术前后一段时间内。患者会出现意识障碍、注意力集中、认知功能紊乱、睡眠 - 觉醒周期失调等症状,严重者甚至会出现幻觉、妄想和攻击行为 。这种病症仅会给患者自身来极大的痛苦,还会对其术后康复产生严重的负面影响。从患者角度来看,围术期谵妄会显著延长患者的住院时间,增加患者的医疗费用负担。有研究表明,发生谵妄的患者住院时间平均比未发生者延长 2 - 3 天。长时间的住院仅会影响患者的生活质量,还可能导致患者错过最佳的康复时机,影响身体机能的恢复。同时,谵妄还

LCG元的博客 1045

MySQLredo logundo logbinlog

一、MySQL日志文件类型 重做日志(redo log) 回滚日志(undo log) 二进制日志(binlog) 错误日志(errorlog) 慢查询日志(slow query log) 一般查询日志(general log) 中继日志(relay log) 其中,比较重要的包括 redo logundo logbinlogredo log 是重做日志,提供前滚操作undo log 是回滚日志,提供回滚操作。 二、几种日志的对比 2-1、用途 re...

mojolang 6795

第十六章:载板制造工艺大全

本文详细介绍了IC载板制造的完整工艺流程,主要包括开料、钻孔、孔金属化、图形形成、层压、表面处理、成型和电测8大工序。每个工序都列出了关键参数和质量控制要点,如开料尺寸精度±0.1mm、激光钻孔孔径50-150μm、孔金属化铜厚20-30μm、图形形成线宽15μm±2μm等。文中还特别说明了MSAP工艺和沉金等特殊工艺的详细流程,以及成型精度和电测标准等关键指标。全文通过流程图和参数表格直观展示了IC载板制造的核心工艺和质量要求。

Open 148

MySQLredo logbinlogundolog

redo log部分 1、为什么需要redo logredo log 最主要的作用就是用于数据库异常宕机的恢复工作。 假如数据库永远会发生异常宕机,那么其实根本需要redo log,因为innodb中有线程断的做把脏页刷新到磁盘的工作,数据库如果一直宕机,就会出现问题。 被划掉的线的部分的理解的产生是因为在极客时间《mysql实战45讲》的课程中,老师就是这么说的,所以就直接这么写了。但在后续的学习中,我查阅了《MySQL技术内幕-InnoDb存储引擎的实现》这本书,发现了最开始的理解并

加油,努力,认真 5148

MySQL 的 binglogredologundolog

我们在每个修改的地方都记录一条对应的 redo 日志显然是现实的,因此实现方式是用时间换空间,我们在数据库崩了之后用日志还原数据时,在执行这条日志之前,数据库应该是一个一致性状态,我们用对应的参数,执行固定的步骤,修改对应的数据。1,MySQL 就是通过 undolog 回滚日志来保证事务原子性的,在异常发生时,对已经执行的操作进行回滚,回滚日志会先于数据持久化到磁盘上(因为它记录的数据比较少,所以持久化的速度快),当用户再次启动数据库的时候,数据库能够通过查询回滚日志来回滚将之前未完成的事务。

sekever的博客 4037

MySQL日志文件:redo logundo logbinlog详解

MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志 binlog(归档日志)和事务日志 redo log(重做日志)和 undo log(回滚日志)。1、重做日志(redo log)2、回滚日志(undo log)3、归档日志(binlog)4、错误日志(errorlog)5、慢查询日志(slow query log)6、一般查询日志(general log)7、中继日志(relay log

qq_36176028的博客 4341

MySQL三大日志——binlogredoLogundoLog详解

我们都知道,事务的四大特性里面有一个是持久性,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,可能因为任何原因再回到原来的状态。那么mysql是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。但是这么做会有严重的性能问题,主要体现在两个方面: 1)、 因为Innodb是以页为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候将完整的数据页刷到磁盘的话,太浪费资源了! 2)、 一个事务可能涉及修改多个数据页,并

想着百万年薪努力的小赵 5万+

硬核干货一文掌握MySQL核心日志:binlogredo logundo log

hello,大家好,我是张张,「架构精进之路」公号作者。在MySQL 中我们经常会接触到三个核心日志,它们分别是:binlogredo logundo log。好多同学对于它们可能并陌生,但是具体区分起来各自的功能用途以及实现原理,那可能认知就会比较模糊了,今天就跟大家一起,来清晰明了的介绍一下这些日志的核心思想和功能原理。1 binlog1.1 binlog 设计目标binlog 记录了对...

架构精进之路 1150

MySQLMySQL的三种log——binlogredo logundo log一文你彻底搞懂!)

binlog其实在日常的开发中听得很多的,因为很多时候数据的更新就依赖着binlog。举个简单的例子:我们的数据是保存在数据库里边的,现在我们对某个商品的某个字段的内容改了(数据库变更),而用户检索出的来数据是走搜索引擎的。为了让用户能够收到最新的数据,我们需要把引擎的数据也改掉。通俗来讲——数据库的变更,搜索引擎的数据也要变更于是,我们就会监听binlog的变更,如果binlog有变更了,那我们就需要将变更写到对应的数据源当中。什么是binlog

miles067的博客 5318

MySQLbinlogredologundolog

redo log默认情况下存储在data目录下ib_logfile0 、ib_logfile1,可以通过 innodb_log_file_size 设置大小, innodb_log_files_in_group 设置文件个数,比如可以配置为一组4个文件,每个文件的大小是 1GB,整个redo log 日志文件组可以记录4G的内容,2、先写redo logmysql崩溃,重启,通过redo log恢复事务,但是binlog里并没有这个事务,主从一致,如果通过binlog来恢复数据,也会丢失事务。

程序猿踩坑集锦 2507

MySQL三大日志(binlogredo logundo log)详解

mysql 数据库 mysql三大日志详解 redo log undo log binlog mysql两阶段提交

SO_zxn的博客 2819

MySQL三大日志(binlog,redolog,undolog)详解

热衷学习,热衷生活!😄 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、MySQL日志 MySQL日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中比较重要的就是二进制日志binlog(归档日志)、事务日志redo log(重做日志)和undo log(回滚日志)。 日志关系如下图: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyhy0V48-1650892680081)(https://qtspace.cn/contentimg/55..

qq_34222160的博客 3799

MySQL三大日志:binlogredologundolog 详细解析

日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志 (归档日志)和事务日志 (重做日志)和 (回滚日志)。 今天就来聊聊 (重做日志)、(归档日志)、两阶段提交、 (回滚日志)。(重做日志)是存储引擎独有的,它让拥有了崩溃恢复能力。比如 实例挂了或宕机了,重启时,存储引擎会使用恢复数据,保证数据的持久性与完整性。 中数据是以页为单位,你查询一条记录,会从硬盘把一页的数据加载出来,加载出来的数据叫数据页,会放入到 中。后续的查询都是先从 中找,没

欢迎来到 ABin-阿斌的博客:写一生代码,创一世佳话,筑一览芳华。 3645

关于MySQL中的binlog

undo logredo log是由Inno DB存储引擎生成的。连接层、服务层(server层)、执行层(存储引擎层)bin log是binary log的缩写,即二进制日志。MySQL在完成一次DML操作后,Server层还会生成一条binlog,等事务提交之后, 还会将该事务执行过程中产生的所有binlog统一写入到binlog日志文件中binlog日志文件中保存了所有数据库的所有表结构的变化和表数据的变化。

这是我的笔记本,记录学习历程,分享学习经验,菜鸡一枚,感谢支持! 630

Mysql的三种logbinlogredo logundo log详解(易懂)!

定义:binlog是二进制格式的日志文件,是MySQL Server层实现的日志,记录所有更改数据的SQL语句(逻辑日志)。服务器层面,与存储引擎无关追加写入,会覆盖旧日志主要用于复制和恢复主从复制数据恢复(基于时间点的恢复)数据审计STATEMENT:记录SQL语句原文优点:日志量小缺点:某些函数(如UUID())可能导致主从生成的数据一致ROW:记录每行数据的变更优点:精确记录变更,主从一致缺点:日志量大(如批量update)MIXED:混合模式。

weixin_43702272的博客 2404

mysqlbinlogredo logundo log详解

它的设计目标是支持 innodb 的 “事务” 的特性,事务 ACID 特性分别是原子性、一致性、隔离性、持久性, 一致性是事务的最终追求的目标,隔离性、原子性、持久性是达成一致性目标的手段,根据的之前的介绍我们已经知道隔离性是通过锁机制来实现的,而事务的原子性和持久性则是通过 redo logundo log 来保障的。只要是对数据库有变更的操作都会记录到 binlog 里面来,我们可以把数据库的数据看做银行账户里的余额,而 binlog 就相当于我们银行卡的流水记录。

过客2019 696

MySQL 三种日志

日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的...

JAVA高级架构 878

MySQL日志系统:binlogredo logundo log

日志是 MySQL 数据库的重要组成部分,比如数据持久化、主从复制、数据回滚等操作都依赖日志系统来实现。本文将介绍MySQL的三种日志:归档日志binlog、重做日志redo log 和回滚日志undo log

测试开发小记 591

大厂基本功 | MySQL 三大日志 ( binlogredo logundo log ) 的作用?

MySQL InnoDB 引擎使用redo log(重做日志)保证事务的持久性,使用undo log(回滚日志)来保证事务的原子性。MySQL数据库的数据备份、主备、主主、主从都离binlog,需要依靠binlog来同步数据,保证数据一致性。

m0_73257876的博客 1331

MySQL日志(redo logbinlog)刷盘策略

write(刷盘)指的是MySQL从buffer pool中将内容写到系统的page cache中,并没有持久化到系统磁盘上。取值0:每次提交都将binlogbinlog cache中 write到磁盘上,而fsync到磁盘。取值N:每次提交事务都将binlog write到磁盘上,累计N个事务之后,执行fsync。取值1:每次提交事务都将redo log 持久化到磁盘上,也就是write+fsync。取值1:每次提交事务都将binlog fsync到磁盘上。fsync:持久化到磁盘。

cwg1992的博客 1152

mysql中的binlog-介绍

binlog是一个二进制格式的文件,用于记录用户对数据的更新操作,一般来说,开启binlog大概会来1%的性能损耗。binlog的使用场景:主从复制、数据恢复binlog日志中包含日志索引文件和日志文件,日志索引文件用于记录所有的二进制文件,日志文件中记录对数据库的修改操作包括DML和DDLbinlog由一系列事件组成,除了binlog自身独有的事件,例如文件创建、文件轮转,大多数事件都对应了mysql的一条sql。事件头:包含事件类型、时间戳、服务器ID等事件体:事件的具体内容校验和。

qq_44818304的博客 779
上一篇: 【无标题】
下一篇: Java十年功力还是涨不了薪,推荐必看《Java核心技术及面试指南》
Java_LingFeng
博客等级 码龄4年 501粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值