以下是 MySQL 中继日志(Relay Log)与二进制日志(Binary Log)的对比说明,从定义、作用、特性等方面详细解析两者的异同点:
| 维度 | 二进制日志(Binary Log) | 中继日志(Relay Log) |
| 定义 |
主服务器(Master)生成的日志文件,记录所有数据变更操作(如 INSERT/UPDATE/DELETE 等)。 |
从服务器(Slave)生成的日志文件,存储从主服务器拉取的二进制日志副本,用于暂存待执行的变更事件。 |
| 所属服务器 |
仅存在于主服务器(或启用二进制日志的独立服务器)。 |
仅存在于开启主从复制的从服务器。 |
| 核心作用 |
1. 主从复制中作为主服务器变更的源头; 2. 数据恢复(基于时间点或位置恢复)。 |
1. 主从复制中作为从服务器接收主服务器变更的中间载体; 2. 保障从服务器故障恢复后继续复制。 |
| 特性 | 二进制日志 | 中继日志 |
| 生成触发 |
主服务器上的数据变更操作触发(DDL/DML),与事务提交绑定。 |
从服务器的 I/O 线程主动从主服务器拉取二进制日志事件后写入,非本地主动生成。 |
| 存储路径 |
默认位于主服务器数据目录,文件名格式为 server-id-bin.NNNNNN(由 log_bin 参数配置)。 |
默认位于从服务器数据目录,文件名格式为 relay-log-prefix.NNNNNN(由 relay-log 参数配置)。 |
| 索引文件 |
存在索引文件 server-id-bin.index,记录所有二进制日志列表。 |
存在索引文件 relay-log-prefix.index,记录所有中继日志列表。 |
| 特性 | 二进制日志 | 中继日志 |
| 支持格式 |
支持 STATEMENT(语句级)、ROW(行级)、MIXED(混合)三种格式(由 binlog_format 控制)。 |
格式与主服务器的二进制日志完全一致(继承主服务器的 binlog_format 配置)。 |
| 内容 |
记录主服务器本地产生的所有数据变更事件(包括自身执行的操作)。 |
仅记录从主服务器拉取的二进制日志事件(即主服务器的变更副本),不包含从服务器本地操作。 |
| 特性 | 二进制日志 | 中继日志 |
| 自动清理 |
通过 expire_logs_days 参数设置保留天数(默认 0,不自动清理),超过期限的日志被删除。 |
通过 relay_log_purge 参数控制(默认 ON),当日志中的事件被 SQL 线程执行且主服务器已删除对应日志时,自动清理。 |
| 手动清理 |
PURGE BINARY LOGS 命令(如删除指定日志或时间之前的日志)。 |
PURGE RELAY LOGS 命令(用法与二进制日志类似)。 |
| 重置方式 |
RESET BINARY LOGS(清空所有二进制日志并生成新日志)。 |
RESET SLAVE ALL(重置从服务器复制配置并删除所有中继日志,慎用)。 |
| 保留依赖 |
保留策略独立,仅受主服务器自身配置影响。 |
依赖主服务器的二进制日志:若主服务器未删除对应日志,中继日志即使已执行也可能不会被清理。 |
| 特性 | 二进制日志 | 中继日志 |
| 复制起点 |
主服务器的变更源头,I/O 线程从主服务器读取二进制日志事件。 |
从服务器的执行源头,SQL 线程从中继日志读取事件并在本地执行。 |
| 不可或缺性 |
主服务器必须启用二进制日志才能进行主从复制(log_bin=ON)。 |
从服务器复制时必须生成中继日志(即使禁用 relay-log,内部仍会生成临时文件,但推荐显式配置)。 |
| 故障恢复 |
主服务器故障时,可通过二进制日志恢复数据;从服务器故障时,需依赖中继日志继续复制。 |
从服务器宕机重启后,SQL 线程从中继日志中断处继续执行,避免重复拉取主服务器日志。 |
| 特性 | 二进制日志 | 中继日志 |
| 是否记录查询 |
仅记录数据变更操作(DDL/DML),不记录只读查询(如 SELECT)。 |
与二进制日志一致,仅记录变更操作的副本。 |
| 性能影响 |
开启二进制日志会增加主服务器 I/O 开销(尤其是 ROW 格式)。 |
增加从服务器 I/O 开销(I/O 线程写入中继日志 + SQL 线程读取执行),可能成为复制瓶颈。 |
| 安全性 |
包含敏感数据变更,需控制存储目录权限(如 chmod 600)。 |
同样包含敏感数据,权限要求与二进制日志一致。 |
- 日志格式兼容性:两者支持相同的日志格式(
STATEMENT/ROW/MIXED),中继日志完全继承主服务器的二进制日志格式。
- 索引文件机制:均通过索引文件(
.index)记录日志列表,便于管理和查找。
- 手动清理方式:支持通过类似的 SQL 命令(
PURGE)手动删除旧日志文件。
- I/O 依赖:均依赖磁盘 I/O 性能,存储在高速设备(如 SSD)可提升复制效率。
- 核心关联:中继日志是二进制日志在从服务器上的 “副本”,二者共同构成主从复制的日志链条(主服务器生成二进制日志 → 从服务器拉取并写入中继日志 → 执行中继日志同步数据)。
- 本质区别:二进制日志是主服务器变更的 “源头记录”,用于全局数据恢复和复制;中继日志是从服务器的 “临时执行队列”,仅服务于本地复制流程,生命周期依赖主服务器日志状态。
合理管理两者的存储路径、清理策略和性能优化(如分离日志与数据存储),是保障 MySQL 主从复制稳定性和效率的关键。