首页 > 其他分享 >BinLog的基本原理

BinLog的基本原理

时间:2023-10-15 18:35:34浏览次数:32  
标签:BinLog 事务 log binlog 基本原理 commit 日志 event

BinLog 记录模式与文件结构

 

BinLog基本概念

Binlog是记录所有MySQL表结构变更以及表数据发生变更的二进制日志。binlog中不会记录select、show等的查询操作,binlog是以事件形式记录相关的变更操作,并且还会包含语句执行所消耗的时间,它从整体上有两个最重要的场景:主从复制、数据恢复。

 

BinLog记录模式

总体上binlog有三种记录模式:

1.Row模式:binlog中记录每一行数据被修改的情况,在mysql中对相同数据做同样的修改。能够完全实现主从数据库的同步和恢复操作。缺点是大批量操作会产生大批量的操作日志 如:alter操作。二进制越来越多就会影响数据库的同步性能。

2.statement模式:binlog会记录修改语句的sql语句,mysql从库在复制sql语句的时候,会通过sql进程将binlog中的sql语句解析成和mysql主库上执行过的sql语句相同的sql语句,然后上从库上执行。优点在于产生少量的二进制文件,减少磁盘的io操作,提升数据存储和恢复的效率。缺点在于某些情况下导致主从数据库数据不一致,比如mysql主库中使用了last_insert_id()和now()这样的函数就会导致不一致。

3.mixed模式:row模式和statement模式混合,正常语句使用statement保存,last_insert_id()和now()使用raw。

 

Bin Log的文件结构

mysql的binlog文件中保存的是对数据库、数据表和数据表中数据的各项更新操作,用来表示修改操作的叫log event,不同的操作对应不同的log event,比较常用的log event有query event、row event、xid event,里面就是各种event的集合。

 

Bin Log的写入时机

Bin Log提交的时候,会记录事务日志和二进制日志。也就是redo log 和binlog,这里就存在一个问题,事务日志和二进制日志,MySQL先记录的是二进制日志。

 

Bin Log的写入规则:

1.触发event事件生成Log Event:主要是根据记录的模式,比如row、statement、mixed以及操作比如create、drop、alter、insert、update等触发event事件生成log event。也就是事件触发执行机制。

2.将事务执行过程中产生的日志事件(Log Event)写入相应的缓冲区:每个事务都有一个缓冲区,Log Event 保存在一个binlog_cache_mngr的数据结构中,这个数据结构有两个缓冲区,一个是stmt_cache用于不支持事务的信息,另一个是trx_cache用于存放支持事务的信息。

3.事务在提交阶段会将产生的日志事件(Log Event)写入磁盘的BinLog文件中:事务在提交阶段会将产生的日志事件写入磁盘的binlog文件中,不同的事务以穿行的方式将日志事件写入binlog文件中,所以一个事务中包含的log event信息在binlog文件中是连续的,中间不会插入其他事务的log event事件,一个事务的binlog是完整。

 

Bin Log组提交机制:

1.BinLog组提交机制:为了提高MySQL中日志刷盘效率,MySQL提供了组提交,group commit会调用fsync()函数将多个事务日志刷新到磁盘的日志文件中,而不是每次将每个事务的日志单独刷新到磁盘的日志文件。

在innodb存储引擎中,提交事务会进行两个阶段的操作:1.修改内存中事务对应的信息,并且会将日志写入相应的redo log buffer。2.调用fsync()函数将redo log buffer中的日志信息刷新到磁盘的redo log文件中。其中步骤2存在磁盘操作比较耗时,所以事务提交后,先将日志信息写入redo log buffer,最后调用fsync()函数将多个事务日志信息从内存的redo log buffer刷新到磁盘的redo log文件。为了保证binlog 和 事务日志的一致性,会在步骤1的prepare阶段会启用一个prepare_commit_mutex锁,这个时候会导致开启二进制后的group commit功能失效(5.6后,BLGC解决这个问题)。

BLGC

1.flush:将每个事务的binlog写入对应的内存缓冲区

2.sync:将内存缓冲区的binlog写入磁盘的binlog文件,如果存在多个事务,只执行一次刷盘

3.commit:leader事务根据队列中的事务顺序调用存储引擎层事务的提交,由于innodb存储引擎本身就支持group commit,所以解决了 prepare_commit_mutex锁导致的group commit失效的问题。

在flush阶段写入binlog到内存缓冲区时,不是写完就立即进入sync阶段,而是等待一定时间,多积累几个事务的binlog一起进入sync阶段,这个时间由binlog_max_flush_queue_time变量决定,默认值为0,除非由大量的事务不断写入和更新操作,否则不建议修改,不然会导致事务的响应速度变慢。当进入到sync阶段时,会将内存缓冲区多个事务的BinLog刷新到磁盘的BinLog文件中,和刷新一个事务的BinLog一样,都是由sync_binlog变量控制。如果一组事务正在执行commit阶段的操作时,其他新产生事务可以执行flush操作,commit阶段和flush阶段不会互相阻塞。这个时候group commit就会不断生效。group commit的性能与队列中的事务数量有关,如果队列只存在一个事务的话和单独提交一个事务差不多,甚至性能更差,提交的事务越多,group commit的性能就更明显。

 

 

标签:BinLog,事务,log,binlog,基本原理,commit,日志,event
From: https://www.cnblogs.com/bdefgman/p/17765951.html

相关文章

  • 11-串口通信的基本原理与应用
    串行通信概述微控制器与外部设备的数据通信,根据连线结构和传送方式的不同,可以分为两种:并行通信和串行通信。​ 并行通信:指数据的各位同时发生或接收,每个数据位使用一条导线。​ 串行通信:指数据一位接一位地顺序发送或接收串行通信有SPI、IIC、UART等多种,最常见最通......
  • 使用binlog恢复数据
    目录数据模拟恢复到查找最初始的建prod表查找updata语句查找delete语句查找删除语句数据模拟[root@db01~]#cat6.sh#!/bin/bashmysql-uroot-p123-e"dropdatabaseifexistsprod;"mysql-uroot-p123-e"createdatabaseifnotexistsprod;"mysql-uroot-p123......
  • xtrabackup实现全量+增量+binlog恢复库
    #一、利用xtrabackup实现完全备份及还原1.下载并安装xtrabackup包[root@centos8~]#wgethttps://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm[root@localho......
  • xtrabackup实现全量+增量+binlog恢复mariadb数据库
     #一、利用xtrabackup实现完全备份及还原1.下载并安装xtrabackup包[root@centos8~]#wgethttps://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm......
  • 08-定时器的基本原理与应用
    定时器的基本原理与应用1、什么是定时/计数器?在没有钟表的时候,定时的方式通过有一注香的时间,或者一桶水的时间。前者烧香不断减少是减法,后者滴水不断增加是加法。定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实......
  • Linux 内存泄漏检测的基本原理
    一、mtrace分析内存泄露mtrace(memorytrace),是GNUGlibc自带的内存问题检测工具,它可以用来协助定位内存泄露问题。它的实现源码在glibc源码的malloc目录下,其基本设计原理为设计一个函数voidmtrace(),函数对libc库中的malloc/free等函数的调用进行追踪,由此来检测内存是否存在......
  • 以太网交换机的基本原理
    以太网交换机的基本原理1.2.......
  • 支持向量机基本原理与公式推导
    我整理了《BAT常见机器学习算法面试题1000题》,供大家学习和参考。资源获取方式:第1步:打开v搜索:医学大数据与人工智能,并关注。第2步:在对话框中输入:E001,即可获取资源地址。支持向量机的数学推导考虑一个二元分类问题,有两个类别,标记为+1和-1。我们有一个包含输入特征向量X和它们对应......
  • 音频和视频基本原理
    音频基本原理:声波捕获:音频信号是由声波振动引起的,通常使用麦克风等传感器将声波转化为电信号。声波的频率和振幅决定了声音的音调和音量。采样和量化:模拟音频信号需要经过采样和量化,将连续的模拟信号转换为离散的数字信号。采样率表示每秒采集的样本数,量化位数表示每个样本的精......
  • 深度学习入门——卷积神经网络CNN基本原理+实战
    beginning今天给小伙伴们介绍一个高级的分类方法——卷积神经网络CNN,并学习用CNN实现图像的分类。作为深度学习的基础,CNN可太重要了呐,在图像分类、目标检测、目标跟踪、语义分割、实例分割等领域随处可见它的身影。废话不多说啦,如果你也对CNN感兴趣的话,赶紧跟我一起愉快的看下去叭......