IO Cache 对于 Mysql Binary log 写入的影响

 

由于工作需要,需要确认IO_CACHE对于mysql binary log的安全性的影响,在系统崩溃的情况下对于存在IO_CACHE是否会影响数据的安全性。本文主要根据mysql 源代码分析mysql binary log 中IO_CACHE的相关原理的应用。

 

在mysql的源码上MYSQL_BIN_LOG类有2份实例,分别对应mysql binary log和 mysql relay log.本文主要对 mysql binary log 的write方法进行分析,观察在写入是由于缓存的存在是否对系统造成数据不能持久化行为。

 

相关代码如下:

sql/log.c (暂时去除row based 模式的binary log代码)

 

由此可见在涉及IO_CACHE时有2个动作值得关注,及在log event 类中的write动作和本类中的flush_and_sync动作。我从客户端出发了一个insert动作,服务器端跟踪 log event中的write动作可以观察到:

 

 

 

 

 

 

 

在Query_log_event::write 前部为向buffer中放入需要写入的header 和body,最后调用my_b_safe_write 写入。下面为my_b_safe_write函数。

 

Mf_iocache.c

 

 

最后调用宏 my_b_write, 此宏中只是做了IO_CACHE的memory copy动作,数据到此为止并不安全。

 

 

而真正的写入是在前面所讲的flush_and_sync动作中

 

 

下面是对应的堆栈:

 

 


 

 

由代码可见,IO_CACHE的存在对于binary log 的数据安全存在一定的隐患,但是相比与innodb中的buffer cache来说,binary log 在写入数据后立即flush和sync动作保证了数据不会大量丢失。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值