首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MYSQL-二进制日志(Binlog)

MYSQL-二进制日志(Binlog)

作者头像
运维小路
发布2025-09-30 15:42:19
发布2025-09-30 15:42:19
1690
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。

MySQL(本章节)

PostgreSQL

MongoDB

Redis

Etcd

我们在前面在介绍中间件:ZooKeeper介绍过事务日志,在MYSQL里面其实有类似的东西,但是他们的功能并不相同。

一、什么是二进制日志(Binlog)

二进制日志(Binary Log)是 MySQL 服务层创建的一种逻辑日志,它记录了对 MySQL 数据库执行的所有更改数据的操作(DDL 和 DML),但不包括 SELECTSHOW 这类不修改数据的操作。

它以二进制的、序列化的形式存储在磁盘上,是数据恢复、主从复制(Replication)等功能的核心基础。

核心特点:

  • 逻辑日志:它记录的是操作的逻辑(如 SQL 语句本身)或行的前后变化,而不是物理的数据页修改。
  • 追加写入:日志文件以追加模式写入,性能很好。
  • 事务安全:在支持事务的存储引擎(如 InnoDB)中,Binlog 与存储引擎的重做日志(Redo Log)协同工作,确保了数据的持久性和一致性(通过两阶段提交)。

二、二进制日志的主要作用

  1. 主从复制(Replication),这是 Binlog 最经典的作用。主库(Master)将其 Binlog 发送到从库(Slave),从库重放(Replay)这些日志事件,从而使得主从数据保持最终一致。它是 MySQL 实现高可用、读写分离和负载均衡的基础。
  2. 数据恢复(Point-in-Time Recovery, PITR)
    • 结合全量备份(如 mysqldump)和 Binlog,可以将数据库恢复到过去的任意时间点。
    • 过程:先恢复最近的全量备份,然后重放该备份时间点之后的所有 Binlog,直到错误发生前的某一个时刻。
  3. 审计(Audit)
    • 通过解析 Binlog,可以查看谁在什么时候对数据库做了哪些修改,用于安全审计和问题排查。

三、二进制日志的格式(Binlog Format)

Binlog 有三种记录格式,这直接影响复制的行为和数据的安全性。可以通过 binlog_format 参数进行设置。

格式

描述

优点

缺点

STATEMENT (SBR)

基于SQL语句的复制。记录的是执行的原始SQL语句。

日志文件小,节省磁盘和网络I/O。

不安全。某些语句(如 NOW(), RAND(), UUID())在主从执行结果可能不一致。

ROW (RBR)

基于行的复制。记录的是每一行数据被修改后的内容(或修改前的内容)。

最安全。能绝对保证主从数据一致性。

日志文件大(例如一条 UPDATE 更新了100万行,STATEMENT 只记1条语句,而 ROW 会记录100万行变化)。

MIXED (MBR)

混合模式复制。默认使用 STATEMENT,但在可能引起主从不一致的情况下,自动切换为 ROW 格式。

在安全性和性能之间取得平衡。

仍有极小的概率在某些复杂情况下出现问题。

强烈推荐: 在现代 MySQL 版本(5.7+,8.0+)中,默认并且强烈建议使用 ROW 格式,因为它提供了最强的数据一致性保证,这是数据安全最重要的考量。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MongoDB
    • 一、什么是二进制日志(Binlog)
    • 二、二进制日志的主要作用
    • 三、二进制日志的格式(Binlog Format)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档