Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql binlog记录格式

MySQL Binlog三种记录格式核心原理

作者:·云扬·

Binlog是 MySQL 核心特性之一,用于记录数据变更操作,支撑主从复制、数据恢复等关键场景,本文将深入解析MySQL Binlog三种主流格式的差异、选型逻辑及配置方法,感兴趣的朋友跟随小编一起看看吧

Binlog(二进制日志)是 MySQL 核心特性之一,用于记录数据变更操作,支撑主从复制、数据恢复等关键场景。其记录格式直接影响日志体积、性能开销与数据一致性,本文将深入解析三种主流格式的差异、选型逻辑及配置方法。

一、三种记录格式核心原理

Binlog 提供 STATEMENT、ROW、MIXED 三种记录模式,底层实现逻辑截然不同:

1. STATEMENT(语句级模式)

2. ROW(行级模式)

3. MIXED(混合模式)

二、优缺点对比与选型指南

格式核心优点潜在缺点优先选型场景
STATEMENT日志体积小、IO 开销低、易阅读主从可能不一致、不支持闪回日志体积敏感、无特殊函数场景
ROW主从绝对一致、支持闪回日志体积大、IO 开销高金融级业务、核心数据存储
MIXED自动适配场景、兼顾性能与一致性不支持闪回、部分架构不兼容中小型系统、通用业务场景

⚠️ 关键提醒:使用

rand()

sysdate()

等非确定性函数时,STATEMENT 模式会导致主从数据不一致,需优先选择 ROW/MIXED 模式。

三、格式修改实操(全局 / 会话级)

根据业务需求,可通过以下方式修改 Binlog 格式,支持永久生效与临时生效:

1. 全局永久生效(需重启 MySQL)

# 1. 编辑MySQL配置文件(路径以实际环境为准)
vim /data/mysql/conf/my.cnf
# 2. 添加/修改配置项(三选一)
binlog_format = STATEMENT
# binlog_format = ROW
# binlog_format = MIXED
# 3. 重启MySQL服务
/etc/init.d/mysql.server restart
# 验证配置
show global variables like 'binlog_format';

2. 会话临时生效(仅当前连接)

-- 切换为ROW模式(当前会话有效)
set session binlog_format = 'ROW';
-- 验证
show variables like 'binlog_format';

3. 全局临时生效(新连接有效,重启失效)

-- 切换为MIXED模式(所有新连接)
set global binlog_format = 'MIXED';
-- 验证
show global variables like 'binlog_format';

四、实战建议

到此这篇关于MySQL Binlog三种记录格式核心原理的文章就介绍到这了,更多相关mysql binlog记录格式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文