谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3905字,纯文字阅读大概需要6分钟。
内容图文
![谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的](/upload/InfoBanner/zyjiaocheng/446/ff2a5eaaffce4805b9ecf971f856ba31.jpg)
- 一、binlog 的高速缓存
- 二、刷盘机制
- 三、推荐的策略
- 推荐阅读
问个问题吧!为什么你需要了解binlog的落盘机制呢?
我来回答一下:
? 上一篇文章提到了生产环境中你可以使用binlog做数据的恢复、审计、以及搭建主从架构的MySQL集群。那你使用这些特性优势的时候有没有问自己一下,你使用的binlog是安全的吗?会不会少记录了一部分数据呢?因为使用一个有问题的binlog去做数据恢复、审计、搭建主从MySQL集群的结果肯定是错误的!
? 下面,我们一起来看一下MySQL执行事物的过程中 binlog 的落盘机制。MySQL是如何保证你使用的binlog是安全的!
一、binlog 的高速缓存
首先为大家介绍一个概念:binlog的高速缓存
意思是:所有未commit的事物产生的binlog,都会被先记录到binlog的高速缓存中。等该事物被commit时,再将缓存中的数据写入binlog日志文件中。
高速缓存的大小可以由参数binlog_chache_size
默认大小为:32768 ,并且每个session都有自己的独立的缓存。多个会话指间彼此不影响。
binlog_chache_size
不能设置太大,否则大量事物打来后肯定会造成宝贵的内存资源被浪费。但是也别太小,因为当一个事物产生的日志足够大超过该参数设置的值时,MySQL会将缓存中的binlog数据写到临时文件中去。
看到这里我们已经知道了binlog会写入缓存中,并且我们可以通过上述参数动态调整该缓冲。别急,继续往看下,binlog何时被写入磁盘呢?
二、刷盘机制
其实binlog写入磁盘的机制由参数sync_binlog
控制。
-
策略1:
sync_binlog = 0
当设置
sync_binlog = 0
时,表示innodb不会主动控制将binlog落盘,innodb仅仅会将binlog写入到OS Cache中,至于什么时间将binlog刷入磁盘中完全依赖于操作系统。选这种策略,一旦操作系统宕机,OS Cache中的binlog就会丢失。 -
策略2:
sync_binlog = 1
设置
sync_binlog = 1
时,表示事物commit时将binlog落盘!这样哪怕机器宕机了,也能确保binlog会被写入到磁盘中。
你有没有觉得当我说:“当事物commit时将binlog落盘” ,这句话很模糊???
是的!如果你仔细品一品,这句话真的很模糊!
当然了,虽然模糊,但是上面说的策略2并没有错误(MySQL官网也是这样描述的)
为了不偏离本篇文章的主线,本篇暂时不详细展开讲 sync_binlog=1 的细节。
我计划放在第 X 篇文章,“能谈谈MySQL的两阶段提交吗?” 详细展开,欢迎关注,敬请期待!
-
策略3:
sync_binlog=N
这里的N不是0,也不是1。
当N大于1时,表示开启组提交,也就是group commit,如果你之前不层了解组提交的话,你可以这样理解它:比如N=5,那MySQL就会等收集5个binlog后再将这5个binlog一口气同步到磁盘上。好处很明显,一次IO可以往磁盘上刷入N个binlog,IO效率会有所提升。坏处也很明显,比如N=5,那当MySQL收集了4个binlog时,服务器宕机,这4个binlog就会丢失。
三、推荐的策略
线上环境中,推荐将日志的刷盘策略设置成下图这这样。
这是也官方推荐的配置策略。这两个参数前面都已经提到过了,想必为什么这么设置,你已经很清楚了!
参考:
https://dev.mysql.com/doc/refman/5.7/en/replication-options-binary-log.html
https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_flush_log_at_trx_commit
推荐阅读
- 大家常说的基数是什么?(已发布)
- 讲讲什么是慢查!如何监控?如何排查?(已发布)
- 对NotNull字段插入Null值有啥现象?(已发布)
- 能谈谈 date、datetime、time、timestamp、year的区别吗?(已发布)
- 了解数据库的查询缓存和BufferPool吗?谈谈看!(已发布)
- 你知道数据库缓冲池中的LRU-List吗?(已发布)
- 谈谈数据库缓冲池中的Free-List?(已发布)
- 谈谈数据库缓冲池中的Flush-List?(已发布)
- 了解脏页刷回磁盘的时机吗?(已发布)
- 用十一张图讲清楚,当你CRUD时BufferPool中发生了什么!以及BufferPool的优化!(已发布)
- 听说过表空间没?什么是表空间?什么是数据表?(已发布)
- 谈谈MySQL的:数据区、数据段、数据页、数据页究竟长什么样?了解数据页分裂吗?谈谈看!(已发布)
- 谈谈MySQL的行记录是什么?长啥样?(已发布)
- 了解MySQL的行溢出机制吗?(已发布)
- 说说fsync这个系统调用吧! (已发布)
- 简述undo log、truncate、以及undo log如何帮你回滚事物! (已发布)
- 我劝!这位年轻人不讲MVCC,耗子尾汁! (已发布)
- MySQL的崩溃恢复到底是怎么回事? (已发布)
- MySQL的binlog有啥用?谁写的?在哪里?怎么配置 (已发布)
- MySQL的bin log的写入机制 (已发布)
谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的
标签:字段 UNC options 操作 描述 containe 设置 group 阶段
本文系统来源:https://www.cnblogs.com/ZhuChangwu/p/14128460.html
内容总结
以上是互联网集市为您收集整理的谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的全部内容,希望文章能够帮你解决谈谈MySQL bin log的写入机制、以及线上的参数是如何配置的所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。