Bin Log 简介以及使用

一:Bin Log 简介

之前介绍了Buffer Pool、Undo Log(回滚日志)、Redo Log(重做日志)、Redo Log Buffer等一些InnoDB存储引擎的插件。今天就介绍另一个日志文件--Bin Log(归档日志),那么Bin Log 的作用是什么呢?之前介绍的Redo Log是一种偏向物理性质的重做日志,里面记录的格式类似于:对哪个数据页中的什么记录,做了什么修改。而Bin Log叫做:归档日志,他里面的日志内容偏向于逻辑性--类似于”对user 表中的id = 1 的一行数据做了更新操作,更新以后的值是什么“。并且Bin Log不是InnoDB存储引擎特有的日志文件,是属于mysql server自己的日志文件。

Bin Log的刷盘策略设置参数:sync_binlog

0:每秒一次,将os cache中的数据刷到磁盘Bin Log 文件中

1:每次提交事务时,将数据刷到磁盘Bin Log 文件中

n:每提交n个事物将Bin Log 写入磁盘

二:Bin Log的使用

在我们提交事物的时候,会把Redo Log 日志写入磁盘文件中去。然后其实在提交事务的时候,我们同时还会把这次更新对应的Bin Log 日志写入到磁盘文件中去,当我们把Bin Log 写入磁盘文件之后,会将对应的Bin log文件名称和这次更新的Bin log日志文件位置,都写入到Redo log 文件日志里去,同时Redo log日志文件里会写一个commit 标记,这样才算最终完成了事物的提交。

那么这个在Redo log日志文件写入commit 有什么意义呢?这其实是用来保持Redo Log 日志Bin log日志一致的。例如:我们在执行第5步的时候,mysql宕机了,此时就会因为没有最终事务commit标记在Redo Log日志中,所以此次事务判定为不成功,不会出现Redo Log日志文件里有这次更新的日志,但是Bin Log 日志文件里没有这次更新的日志,不会出现数据不一致的情况。同样要是第6步就宕机了,也会因为没有将commit写入到Redo Log 中,而判定此次事务无效。只有将commit标记写入到Redo Log 中才会判定此次事务是成功的。

最后,后台IO线程会将内存中Buffer Pool中修改后的脏数据刷回到磁盘中。 如果在你IO线程把脏数据刷回到磁盘之前,mysql宕机了也没关系。因为重启之后,会根据Redo Log日志(重做日志)恢复之前提交事物去修改内存中的数据,之后IO线程还是会将修改后的数据刷到磁盘中。

借道友法力一用:

========================== stay hungry stay foolish =============================

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值