Binlog介绍

概念

Binary log(二进制日志),简称Binlog。 Binlog是记录所以数据表结构变更以及表数据修改的二进制日志,不会记录select和show这类操作。Binlog是以事件形式记录,还包括语句所执行的消耗时间。Binlog是MySql Server自己的日志,但是Redo Log是基于InnoDB引擎所特有的日志。

开启Binlog日志的最重要使用场景

  • 主从复制

    在主库开启Binlog功能,这样主库就可以把Binlog传递给从库,从库拿到Binlog后实现数据恢复达到主从数据一致性。

  • 数据恢复

    通过mysqlbinlog工具来恢复数据。

记录模式

Binlog文件名默认为“主机名__binlog-序列号”,例如:oak_binlog-000001,也可以在配置文件中指定名称。

文件记录模式有三种:

  • ROW(row-based replication, RBR):日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。

    • **优点:**能清楚记录每一行数据修改的细节,能完全实现主从数据的同步和数据恢复。
    • **缺点:**批量操作会产生大量日志,尤其是alter table会让日志暴涨。
  • STATMENT(statment-based replication, SBR):每一条被修改数据的SQL都会记录到master的Binlog中,salve在复制的时候SQL进程会解析成和原来master端执行过语句复制。

    • **优点:**日志量少,减少磁盘IO,提升存储和恢复速度。

    • **缺点:**在某些情况会导致主从数据不一致,比如last_insert_id(),now()等函数。

  • MIXED(mixed-based replication, MBR):以上两种模式混合使用。一般会使用STATMENT模式保存binlog,对于STATMENT模式无法复制的操作使用ROW模式保存binlog,MySql会根据执行的SQL语句选择写入模式。

文件结构

MySql的binlog文件中记录的是对数据库的各种修改操作,用来表示修改操作的数据结构是Log event。不同的数据修改操作对应不同的Log event。比较常用的log event有:Query event、Row event、Xid event等。

Binlog文件的内容就是各种Log event的集合。

Binlog文件中Log event结构如下图所示:

类型字节数描述
timestamp4字节事件开始的执行时间
Event Type1字节指明该事件的类型
server_id1字节服务器的server ID
Event size4字节该事件的长度
Next_log pos4字节固定4字节下一个event的开始位置
Flag2字节固定2字节 event flags
Fixed part每种Event Type对应结构体固定的结构部分
variable每种Event Type对应结构体可变的结构部分

Binlog写入机制

  • 根据记录模式和操作触发event事件生成log event(事件触发执行机制)

  • 将事务执行过程中产生log event 写入缓冲区,每个事务线程都有一个缓冲区

    Log event 保存在一个binlog_cache_mngr数据结构中,在该结构中有两个缓冲区,一个是stmt_cache,用于存放不支持事务的消息;另一个是trx_cache,用于存放支持事务的消息。

  • 事务在提交阶段会将产生的log event写入到外部binlog文件中。

    不同事务以串行方式将log event写入binlog文件中,所以一个事务包含的log event信息在binlog文件中是连续的,中间不会插入其他事务的log event。

    binlog是引擎插件上层的功能,事务提交第一个就会调用binlog功能接口,然后再调用其他存储引擎的功能接口。因此先写binlog,然后再执行InnoDB的redo log/undo和脏页刷新操作。

Binlog文件操作指令

待补充

Redo Log和Binlog区别

  • Redo Log是属于InnoDB引擎功能,Binlog是属于MySql Server自带功能,并且是以二进制文件记录。
  • Redo Log属于物理日志,记录该数据页更新状态内容,Binlog是逻辑日志,记录更新过程。
  • Redo Log日志是循环写,日志空间大小是固定,Binlog是追加写,写完一个写下一个,不会覆盖使用。
  • Redo Log作为服务器异常宕机后事务数据自动恢复使用,Binlog可以作为主从复制和数据恢复使用。Binlog没有自动crash-safe能力。
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值