暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL数据库Binlog的写入机制

原创 北斗 2023-06-03
570

MySQL事务在提交的时候,会记录事务日志和二进制日志,也就是Redo Log和Binlog。这里就存在一个问题:对于事务日志和二进制日志,MySQL会先记录哪种呢?

大家已经知道,Redo Log是InnoDB存储引擎特有的日志,Binlog是MySQL本身就有的上层日志,并且会先于InnoDB的事务日志被写入。因此在MySQL中,二进制日志会先于事务日志被写入。

简单点理解就是MySQL在写Binlog文件时,会按照如下规则进行写操作。

1)根据记录的模式(Row、Statement和Mixed)和操作(create、drop、alter、insert、update等)触发事件生成日志事件(事件触发执行机制)。

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

3)事务在commit阶段会将产生的日志事件写入磁盘的Binlog文件中。因为不同的事务会以串行的方式将日志事件写入Binlog文件中,所以一个事务中包含的日志事件信息在Binlog文件中是连续的,中间不会插入其他事务的日志事件。

综上,一个事务的Binlog是完整的,中间不会插入其他事务的Binlog。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论