阿里面试:MySQL Binlog有哪些格式?底层原理?优缺点?

yumo6668个月前 (05-09)技术文章55

binlog的格式也有三种:STATEMENT、ROW、MIXED ,下面我详解binlog三种模式@mikechen

Statement模式

Statement模式:是基于SQL语句的复制(statement-based replication),只记录修改SQL语句。

Statement格式记录了每个执行的SQL语句,包括:INSERT、UPDATE、DELETE等数据操作语句。

比如:执行一条update T set update_time=now where id=1。

记录的内容如下:

Statement格式不记录事务的开始和结束,所以对于非事务性操作较为适用。

Statement模式优点:

相对于Row格式Statement格式的binlog文件通常较小,因为它只记录了SQL语句,而不记录每个数据行的变化。

Statement模式缺点:

缺点:准确性差,对一些系统函数不能准确复制或不能复制,如now()、uuid()等。

Row格式模式

row记录的内容不再是简单的SQL语句了,还包含操作的具体数据,比如:包括插入、更新和删除操作。

Row格式模式基于行的复制(row-based replication),每一行记录的每个字段变化前后得到值。

如果一个update语句修改一百行数据,那么这种模式下就会记录100行对应的记录日志。

Row格式适用于事务性操作,因为它记录了事务内每一行数据的变化,可以确保事务在复制到从数据库时能够准确地重放。

需要注意的是,Row格式可能会导致较大的binlog文件,因为它记录了每一行数据的变化。

此外,Row格式可能对数据库的性能产生一定的影响,因为它需要记录大量的数据变化信息。

Row格式模式优点:

准确性强,能准确复制数据的变更。

Row格式模式缺点:

日志文件大,较大的网络IP和磁盘IO。

业内目前推荐使用的是row模式,准确性高,虽然说文件大,但是现在有SSD和万兆光纤网络,这些磁盘IO和网络IO都是可以接受的。

总的来说Row格式是MySQL binlog的一种高度精确的记录格式,适用于需要高度数据一致性、涉及复杂数据变化或需要事务性支持的情况。

Mixed混合模式

混合模式复制(mixed-based replication, MBR),是statement和row模式的混合。

混合模式会根据具体的SQL语句和操作来自动选择记录方式,即在Statement格式和Row格式之间切换。

混合模式尝试在Statement格式和Row格式之间找到一个平衡点,以优化性能和可读性。

比如:

对于简单的SQL语句,混合模式使用Statement格式,记录SQL语句的文本。

对于复杂的数据变化,如:包含计算字段、随机生成的值或触发器等情况,混合模式会使用Row格式,记录每一行数据的变化,以确保数据的一致性。

混合模式优点:

优点:准确性强,文件大小适中。

混合模式缺点:

缺点:有可能发生主从不一致问题。

本文作者:mikechen

文章来源:mikechen.cc

相关文章

MySQL原理介绍(mysql的运行原理)

一、Mysql中有哪几种锁?1)表级锁开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。2)行级锁开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高...

mysql数据库分析(mysql 分析)

使用docker安装mysql 数据库拉取镜像:docker pull mysql:5.7 指定5.7 版本,也可以根据直接需求填写版本号docker images 可以看到下载好镜像创建好三个需要挂...

「职场面试」数据库常见面试题 (二)-MySQL分库分表

上期我们讲了索引,MyISAM和InnoDB的选择等相关的数据库面试题目,小伙伴们掌握得怎么样了?这期树懒君决定分享一下分库分表方面的面试题目,这是一个很经典的面试问题哦~首先,要知道分库分表是两回事...

MySQL数据库入门(四)数据类型简介

在MySQL中数据类型有以下五种:数字整数:常用的有2种,一是int型,int型最多可以表示10位数字(无符号的4开头,有符号的2开头;二是tinyint unsigned,用来表示年龄(值范围是0-...

MySQL调优(mysql怎么优化)

来源:https://www.cnblogs.com/monkey-xuan/p/15858689.html调优的目的?让吞吐量更大,响应速度更快。关于数据库优化,我们从以下5个维度进行。一.优化表结...

最全的MySQL总结,助你向阿里“开炮”(面试题+笔记+思维图)

前言作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上...