当前位置: 首页 > news >正文

MySQL binlog的三种模式

MySQL 的 binlog(Binary Log) 默认的模式是 STATEMENT,即 语句模式。在这种模式下,MySQL 会记录所有对数据库执行的数据修改操作(如 INSERTUPDATEDELETE 等)的 SQL 语句。


1. binlog 的三种模式

MySQL 的 binlog 支持三种记录模式,分别是:

  1. STATEMENT(语句模式)
    • 记录实际执行的 SQL 语句。
    • 默认模式。
  2. ROW(行模式)
    • 记录每一行数据的修改细节。
    • 例如,UPDATE 操作会记录修改前后的整行数据。
  3. MIXED(混合模式)
    • 结合 STATEMENT 和 ROW 模式。
    • 默认使用 STATEMENT 模式,但在某些情况下自动切换到 ROW 模式。

2. 默认模式:STATEMENT

  • 特点
    • 记录 SQL 语句,而不是实际修改的数据。
    • 日志文件较小,节省存储空间。
    • 在某些情况下可能导致主从复制不一致(如使用非确定性函数 NOW()RAND() 等)。
  • 适用场景
    • 适合简单的 SQL 操作,且不涉及非确定性函数的场景。

3. 如何查看和修改 binlog 模式

3.1 查看当前 binlog 模式
SHOW VARIABLES LIKE 'binlog_format';
  • 返回结果示例:
    +---------------+-----------+
    | Variable_name | Value     |
    +---------------+-----------+
    | binlog_format | STATEMENT |
    +---------------+-----------+
    
3.2 修改 binlog 模式

可以通过以下方式修改 binlog 模式:

  1. 临时修改(重启后失效):
    SET GLOBAL binlog_format = 'ROW';
    
  2. 永久修改(修改配置文件):
    • 编辑 MySQL 配置文件(如 my.cnfmy.ini),添加或修改以下内容:
      [mysqld]
      binlog_format = ROW
      
    • 重启 MySQL 服务使配置生效。

4. 不同模式的对比

模式记录内容优点缺点适用场景
STATEMENTSQL 语句日志文件小,节省存储空间可能导致主从复制不一致简单 SQL 操作,无非确定性函数
ROW每一行数据的修改细节数据一致性强,支持复杂操作日志文件较大,占用更多存储空间复杂 SQL 操作,涉及非确定性函数
MIXED结合 STATEMENT 和 ROW 模式兼顾日志大小和数据一致性需要根据场景自动切换模式通用场景

5. 选择 binlog 模式的建议

  1. STATEMENT
    • 适合简单场景,且不涉及非确定性函数。
    • 日志文件较小,适合存储空间有限的场景。
  2. ROW
    • 适合复杂场景,涉及非确定性函数或需要强一致性。
    • 日志文件较大,但数据一致性更强。
  3. MIXED
    • 适合通用场景,兼顾日志大小和数据一致性。

6. 总结

  • MySQL 的 binlog 默认模式是 STATEMENT
  • 可以通过 SHOW VARIABLES 查看当前模式,通过 SET GLOBAL 或修改配置文件调整模式。
  • 根据实际需求选择合适的 binlog 模式,以平衡日志大小、数据一致性和性能。
http://www.dtcms.com/a/17166.html

相关文章:

  • MYSQL批量UPDATE的两种方式
  • JS设计模式之单例原型
  • 【深度学习模型分类】
  • 深入解析系统调用接口(System Call Interface, SCI)
  • 使用C#元组实现列表分组汇总拼接字段
  • Android中解决Button组件英文全部自动大写的问题
  • Oracle临时表空间(基础操作)
  • 科技之光闪耀江城:2025武汉国际半导体产业与电子技术博览会5月15日盛大开幕
  • 基于阿里云可观测产品构建企业级告警体系的通用路径与最佳实践
  • 掌握 PHP 单例模式:构建更高效的应用
  • c语言样式主题 清爽风格 代码色彩 keil风格 适合单片机开发GD32 STM32等 cursor或者vscode 的settings.json文件
  • 51c自动驾驶~合集49
  • IoTDB 断电后无法启动 DataNode,日志提示 Meet error while starting up
  • Linux centos8部署maven3.9.9
  • 「软件设计模式」建造者模式
  • 数据结构——链表
  • HTML 简介
  • AspectJ 下 Advisor 的排序过程
  • 力扣 15.三数之和
  • 日语发音的节拍
  • org.springframework.boot.autoconfigure.AutoConfiguration.imports为什么使用?如何使用?
  • 【嵌入式Linux应用开发基础】opendir函数、readdir函数和closedir函数(二)
  • 机器学习 - 关于逻辑回归的若干问题
  • 零基础开发自己的微信小程序(工具箱之父)(二)
  • CPP集群聊天服务器开发实践(三):群组聊天业务
  • 请求超时处理
  • 软考教材重点内容 信息安全工程师 第16章 网络安全风险评枯技术原理与应用
  • 【愚公系列】《Python网络爬虫从入门到精通》009-使用match()进行匹配
  • 十四、GitLab 流水线自动化部署之 Windows Server
  • python轻量级框架-flask