mysql主从复制使用binlog吗_mysql日志机制说明

来源:这里教程网 时间:2026-02-28 20:45:42 作者:

是的,MySQL主从复制必须依赖 binlog(二进制日志)才能工作。binlog 不仅是复制的数据源,也是实现数据恢复、审计和变更追踪的核心日志。

binlog 是主从复制的数据源头

主库在执行 INSERT、UPDATE、DELETE、CREATE、ALTER 等操作时,只要涉及数据或结构变更,就会把对应事件写入 binlog。从库的 I/O 线程正是通过读取主库的 binlog 内容,再写入本地 relay log,最后由 SQL 线程重放,完成同步。

没有开启 binlog(即未配置 log-bin),主库无法提供复制所需的事件流,从库将无法启动复制 binlog 必须在主库上启用,从库无需开启 binlog(除非它也作为其他从库的主库) 主库的 server-id 和从库的 server-id 必须唯一且不为 0,否则复制线程拒绝启动

binlog 的三种格式影响复制行为

binlog_format 参数决定日志记录方式,直接影响数据一致性与日志体积:

STATEMENT(SBR):记录原始 SQL 语句;节省空间,但遇到 NOW()、RAND()、USER() 等非确定性函数时,主从执行结果可能不同 ROW(RBR):记录每一行变更前后的完整镜像;安全性高,能精准还原数据,适合生产环境推荐使用 MIXED:MySQL 自动选择 SBR 或 RBR;多数场景可靠,但控制粒度不如显式指定 RBR

binlog 相关关键参数

除基础启用外,以下参数对复制稳定性至关重要:

sync_binlog = 1:每次事务提交都刷盘,避免主机宕机导致 binlog 丢失,保障主从数据不丢 binlog_row_image = FULL(默认):确保 RBR 模式下记录足够信息用于回放和闪回 expire_logs_daysbinlog_expire_logs_seconds:控制 binlog 自动清理周期,防止磁盘占满 max_binlog_size:单个 binlog 文件最大容量,超限后自动滚动新文件

binlog 与其他日志的区别

MySQL 有多种日志,作用各不相同:

binlog(Server 层):逻辑日志,记录所有 DML/DDL 变更,用于复制和 PITR(基于时间点恢复) redo log(InnoDB 层):物理日志,保证事务持久性(crash safe),只在本地生效,不参与复制 undo log(InnoDB 层):用于事务回滚和 MVCC,并不对外输出,也不传输到从库 error log / slow query log:诊断类日志,与数据同步无关

相关推荐