MySQL学习笔记之MySQL是如何保证数据不丢的(二十二)

声明:本文章内容是根据极客时间中林晓斌的课程《MYSQL45讲》,经过学习,加以自己的理解形成的笔记。具体原文可以到官网进行阅读。如有侵权请,告知删除。

前面的文章介绍过mysql能够保证发生重启的时候数据的正确性,其实现过程是通过bin log与redo log两个日志系统相互配合完成的。

1、bin log的写入机制

在这里插入图片描述
通过上面这张图片 可以了解到 binlog的写入机制为
1、binlog cache
2、文件系统 pagecache
3、执行fsync操作,将pagecache中的内容写入磁盘

Created with Raphaël 2.2.0 开始 binlog cache page chche disk 结束

并且每个线程有他们对应的一个binlog cache。write 和 fsync 的时机,是由参数 sync_binlog控制的:
sync_binlog:0 表示只write 不fsync
sync_binlog:1 表示只每次wite 之后都会fsync
sync_binlog=N(N>1) 的时候,表示每次提交事务都 write,但累积 N 个事务后才 fsync

2、redo log的写入机制

在这里插入图片描述
与binlog不同的是,redolog是所有的线程公用一个 redo log buffer
为了控制 redo log 的写入策略,InnoDB 提供了 innodb_flush_log_at_trx_commit 参数,它有三种可能取值:
设置为 0 的时候,表示每次事务提交时都只是把 redo log 留在 redo log buffer 中 ;
设置为 1 的时候,表示每次事务提交时都将 redo log 直接持久化到磁盘;
设置为 2 的时候,表示每次事务提交时都只是把 redo log 写到 page cache。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值