博客
关于我
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/

你可能感兴趣的文章
Netty工作笔记0037---主从Reactor多线程
查看>>
Netty工作笔记0038---Netty模型--通俗版
查看>>
Netty工作笔记0040---Netty入门--服务端1
查看>>
Netty工作笔记0041---Netty入门--服务端2
查看>>
Netty工作笔记0042---Netty入门--编写客户端
查看>>
Netty工作笔记0043---单Reactor多线程模式
查看>>
Netty工作笔记0044---Netty案例源码分析
查看>>
Netty工作笔记0044---scheduledTaskQueue
查看>>
Netty工作笔记0045---Netty模型梳理
查看>>
Netty工作笔记0045---异步模型原理剖析
查看>>
Netty工作笔记0046---TaskQueue自定义任务
查看>>
Netty工作笔记0046---异步模型原理剖析
查看>>
Netty工作笔记0047---Http服务程序实例
查看>>
Netty工作笔记0048---Http服务过滤资源
查看>>
Netty工作笔记0050---Netty核心模块1
查看>>
Netty工作笔记0051---Netty核心模块2
查看>>
Netty工作笔记0052---Pipeline组件剖析
查看>>
Netty工作笔记0053---Netty核心模块梳理
查看>>
Netty工作笔记0054---EventLoop组件
查看>>
Netty工作笔记0055---Unpooled应用实例1
查看>>