MySQL Binlog(主从同步/数据恢复) 及 mysqldump:

本文详细介绍了MySQL的二进制日志(binlog)在主从复制和数据恢复中的关键作用。主从复制流程包括Master的IO线程将binlog传给Slave的IO线程,再由SQL线程执行SQL。MySQL 5.6.3开始支持多线程复制。数据恢复借助mysqlbinlog工具,可以选择基于SQL语句或行的复制格式。binlog格式有statement、row和mixed,各有优缺点。此外,文章还涵盖了binlog的启用、日志格式设置、操作命令及生成时机,并讨论了事务与binlog的关系。最后,提到了mysqldump的使用及其在全量和增量备份中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是主从复制和数据恢复

Binlog日志的两个重要的使用场景:

  1. MySQL主从复制:MySQL Replication在Master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的

根据这张图,把 mysql 的主备复制原理分解为如下流程:

  • 总结来说,MySQL 的主从复制:异步单线程

  • Master上 1 个IO线程,负责向Slave传输 binary logbinlog
  • Slave上 2 个线程:IO 线程执行SQL的线程,其中:
    • IO线程:将获取的日志信息,追加到relay log上;
    • 执行SQL的线程:检测到relay log中内容有更新,则在Slave上执行sql;
  • 特别说明:MySQL 5.6.3 开始支持「多线程主从复制」,一个数据库一个线程多个数据库多个线程     

MySQL 主从复制 / 增量同步(个人总结):

  1. master要开启binlog,并记录所有修改db数据的事件
  2. slave会启动一个io线程,与master建立客户单连接
  3. master也启动一个io线程(二进制转储线程)去读取master上的binlog日志,并向slave上的io线程发送"二进制数据"
  4. slave接收到"二进制数据"并保存在relay log中
  5. slave另启动sql线程,负责更新relay log中的数据到从库中(执行一遍relay log中的增量数据修改操作)

具体建立从库的方法参考:MySQL增加从库 - Jadear - 博客园

2. 数据恢复:通过使用 mysqlbinlog 工具来使恢复数据

mysql binlog有三种格式:

  • statement(默认):基于SQL语句的复制(statement-based replication, SBR)
  • row(常用):基于行的复制(row-based replication, RBR)
  • mixed(前两者混合使用):混合模式复制(mixed-based replication, MBR)

statement 和 row 格式的 优缺点比较:

  • statement
    • 优点:生成的日志文件体积小,节约IO,存储的是sql执行语句
    • 缺点:搭建MySQL主从时,会出现一些问题。

      比如:master查询当前时间select now(),slave同步master的binlog后,同样查询当前时间,这时候就会出现主从二者时间不一致的问题。
  • row
    • 优点:记录以行为结果的修改记录,确保主从数据的一致。
    • 缺点:
      • 由于是以每行记录的修改来写日志,故日志体积大(正常日志的3-5倍大小),占用大量 “io/网络” 资源(可能造成主从同步的延迟)。

        比如:有一个 delete 语句删掉 10 万行数据,用
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值