16 mysql主从的数据物理格式是怎样的?

vvEcho 2025-03-07 12:30:17
Categories: Tags:

MySQL 主从复制的数据物理格式主要由两部分构成:

主库的二进制日志(Binlog)和从库的中继日志(Relay Log),其底层存储与 MySQL 的存储引擎(如 InnoDB)密切相关

主库的二进制日志物理格式

Binlog 是主库记录所有数据修改操作的二进制文件,其内容按事件(Event)存储,每个事件包含操作类型、时间戳、执行线程、数据变更等信息。
存储方式:
STATEMENT 格式:记录原始 SQL 语句(如 UPDATE t SET col=1),逻辑简单但可能因函数或上下文导致主从不一致

ROW格式:记录实际修改的行数据(如修改前后各字段的值),保证数据一致性但日志体积较大

MIXED格式:默认模式,根据操作类型动态选择 STATEMENT 或 ROW 格式

文件结构:由多个 mysql-bin.XXXXXX 文件组成,按顺序滚动生成,默认保存在 MySQL 数据目录下

InnoDB:数据存储在 .ibd 文件中(每个表对应一个文件),采用 B+树索引结构,支持事务和行级锁
MyISAM:数据存储在 .MYD(数据文件)和 .MYI(索引文件)中,不支持事务

从库的中继日志

物理格式:与主库的 Binlog 完全一致,从库通过I/O线程将主库的Binlog事件原样保存到Relay Log中

文件结构:由多个relay-bin.XXXXXX文件组成,存储路径可通过relay_log参数配置

数据同步后的存储

从库的SQL线程解析Relay Log中的事件,并重放这些操作到本地数据库

数据文件格式:与主库保持一致(如 InnoDB 的 .ibd 文件),保证物理结构相同。

事务提交:若主库使用 InnoDB 且开启事务,从库在应用 Binlog 时也会遵循相同的ACID规则

延迟处理:若从库配置了延迟复制(如CHANGE MASTER TO MASTER_DELAY=3600),数据文件中的内容会滞后于主库