博客
关于我
MYSQL中BINLOG_FORMAT的三种模式
阅读量:687 次
发布时间:2019-03-17

本文共 2351 字,大约阅读时间需要 7 分钟。

MySQL 复制 是 数据库 高级 管理 的重要课 sharper tricks。MySQL 复制 主要 有 三种 模式:基于 SQL 语句的复制 (SBR)、基于 行的复制 (RBR) 和 混合模式复制 (MBr)。每种模式 都有 对应的 binlog 格式:STATEMENT、ROW 和 MIXED。本文将详细 讲解 这些 模式 的 特点 以及 binlog 格式 的 配置 方法。

1. STATEMENT 模式 (SBR)

STATEMENT 模式 是 MySQL 复制 的 最经典 模式之一。其 特点 是 记录 地主ların enemi 系统改动 的 SQL 语句 而不是 每一 行 的 刚变。这 使得 binlog 日志 越轻裕, IO 操作 也 更高效。

但是,该 模式 也 存在 缺点。例如,在 主从 服务器 之间 如果触发某些 特定 函数(如 sleep() 或 udf)的调用 或者٢ last_insert_id() 的 值发生变化,可能 会 导致 数据 不一致。此外,考虑 到货架 如果 USING FOUND_ROWS() 或者类似的函数调用,复制 过程 也 可能出现 问题。


2. ROW 模式 (RBR)

ROW 模式 则 不 记录 每一 条 SQL 语句 的 上下文 信息,而仅 记录 数据 量 的 刚变。这种 方式 的 优点 是 不会 遭遇 到某些 特定 函数(如触发器、存储过程)的 复制 问题。在 大多数情况 下 Suppose row 模式 是更安全可靠的 复制 方式。

不过,这种 方式 也 有 其缺点。例如,binlog 日志 会 因为 记录 更多 的 行 刚变 而 变得 非常 大。特别是在 会修改大量 数据的 ALTER TABLE 操作 时,binlog 日志ốgesize 可能 会暴炸式增长。此外,在 从服务器 上 执行 复制 时 的资源 消耗 会比 SBR 模式 高。


3. 混合模式 (MBr)

MBr 模式 是 SBR 和 RBr 模式 的 混合。MySQL 会 根据 SQL 语句 的 类型 自动 选择 binlog 格式。一般推荐 为 STATEMENT 模式 的 SQL 进行记录, 而 对于 不 可以在 STATEMENT 模式 中 被 处理 的 终身操作 则 采用 RBr 模式。

这一 模式 的 优势 在于 可以 最大限度地 利用每种 模式 的优势。例如,对于 基于时间函数 的 SQL(如 now()),binlog 会 含有向 server surrender 的 时间 信息,以 确保 数据 的 数 碎 准确。对于无法在从服务器 上 被 处理 的功能性函数(如 ucf),则 会 采用 RBr 模式 记录。


binlog 配置

在MySQL 的 my.cnf 配置 文件 中,可以 通过以下选项 来 配置 binlog:

  • binlog_format = MIXED:设置 binlog 日志 格式为混合模式。
  • log-bin = /data/mysql/mysql-bin.log:指定 binlog 文件 的 路径。
  • expire_logs_days = 7:设置 binlog 日志 过期 删除 的 天数。
  • max_binlog_size = 100m:限制单个 binlog 文件 的 大小。
  • binlog_cache_size = 4m:设置 binlog 缓存 的 大小。
  • max_binlog_cache_size = 512m:设置最大可用 binlog 缓存 大小。

MYSQL 复制 的 优缺 点 直比

SBR 的 优点:

  • 历史悠久,技术成熟。
  • binlog 文件 较小,IO 操作 更高效。
  • binlog 可以用作 数据 恢复 的 实时 工具。
  • 主从 服务器 版本 可以 存有 不同, 从服务器 可以 使用 更高 的版本。

SBR 的 缺点:

  • 不是 所有 UPDATE 语句 都 可以 被 复制,特别是在 调用 不确定 操作 的情况下。
  • 存储 函数(如 uuid()、found_rows())无法 过转。
  • 对于 某些特定的 UPDATE 语句(如 WHERE 条件 不使用 索引),可能 会 错失 记录。
  • 对于 AUTO_INCREMENT 字段 的 InnoDB 表,INSERT 语句 可能会 阻塞 其他 INSERT 操作。

RBr 的 优点:

  • 更安全可靠,任何 SQL 语句 都 可以 被 复制。
  • 对于 大多数 数据库 系统 的 复制 技术 一致。
  • 主从 服务器 之间 可能 更快,特别是 当 主键 存在 时。

RBr 的 缺点:

  • binlog 大量增加。
  • 复杂的 回滚 操作 可能 会 导致 binlog 中的 大量 数据。
  • 主服务器 对于许多 UPDATE 语句 会 记录 更多 记录,可能 会 导致 binlog 并发 写 问题。
  • 对于 含有 BLOB 值 的存储 函数(如 ucf),复制 可能 会 变慢。

关于 系统 库 表 的 处理

在 MySQL 中,如果 使用 INSERT、UPDATE 或 DELETE 直接 操作 表,则 binlog 格式 会 根据 binlog_format 的设置 进行记录。无论 binlog_format 是该怎么样,管理 数 语句(如 grant、revoke、set password 等)都 将采用 RBr 模式 记录。


MySQL 复制是一个 将 数据 序列 化、分发 给Slave节点的 很重要 的 工作流程。选择 正确的 模式 以及合理 的 binlog 配置 方可 优化 前后的性能,同时确保 数据 的 稳定性 和 可 持有性。

转载地址:http://elxhz.baihongyu.com/

你可能感兴趣的文章
mysql 快照读 幻读_innodb当前读 与 快照读 and rr级别是否真正避免了幻读
查看>>
MySQL 快速创建千万级测试数据
查看>>
mysql 快速自增假数据, 新增假数据,mysql自增假数据
查看>>
MySql 手动执行主从备份
查看>>
Mysql 批量修改四种方式效率对比(一)
查看>>
mysql 批量插入
查看>>
Mysql 报错 Field 'id' doesn't have a default value
查看>>
MySQL 报错:Duplicate entry 'xxx' for key 'UNIQ_XXXX'
查看>>
Mysql 拼接多个字段作为查询条件查询方法
查看>>
mysql 排序id_mysql如何按特定id排序
查看>>
Mysql 提示:Communication link failure
查看>>
mysql 插入是否成功_PDO mysql:如何知道插入是否成功
查看>>
Mysql 数据库InnoDB存储引擎中主要组件的刷新清理条件:脏页、RedoLog重做日志、Insert Buffer或ChangeBuffer、Undo Log
查看>>
mysql 数据库中 count(*),count(1),count(列名)区别和效率问题
查看>>
mysql 数据库备份及ibdata1的瘦身
查看>>
MySQL 数据库备份种类以及常用备份工具汇总
查看>>
mysql 数据库存储引擎怎么选择?快来看看性能测试吧
查看>>
MySQL 数据库操作指南:学习如何使用 Python 进行增删改查操作
查看>>
MySQL 数据库的高可用性分析
查看>>
MySQL 数据库设计总结
查看>>