MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1232字,纯文字阅读大概需要2分钟。
内容图文
![MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog](/upload/InfoBanner/zyjiaocheng/1049/ca6241118aaa4e98b0f73a8bc20c0888.jpg)
innodb_flush_log_at_trx_commit
该参数控制重做日志写入磁盘的过程。我们知道 InnoDB 使用“Write Ahead Log”策略来避免数据丢失问题,即依靠重做日志来保证数据能在丢失后进行恢复。因此,InnoDB 重做日志的持久化非常重要。这个参数的默认值为1
首先需要大致了解一下mysql日志操作步骤:
log_buff --》 mysql写 (write) --》 log_file --》 OS刷新 (flush) --》 disk
innodb_flush_log_at_trx_commit 参数解释:
0(延迟写): log_buff -- 每隔1秒 --》 log_file — 实时 --》 disk
1(实时写,实时刷): log_buff — 实时 --》 log_file -- 实时 --》 disk
2(实时写,延迟刷): log_buff — 实时 --》 log_file -- 每隔1秒 --》 disk
该参数的有效值有 0、1、2:
0:事务提交时,不将重做日志缓冲写入磁盘,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘。因此如果 MySQL 发生宕机,那么就有可能丢失一部分事务。
1:事务提交时,会将重做日志缓冲写入磁盘,并且立即刷新(fsync())。注意,因为操作系统的“延迟写”特性,此时的刷入只是写到了操作系统的缓冲区中,因此执行同步操作才能保证一定持久化到了硬盘中。
2:事务提交时,会将重做日志缓冲写入磁盘,但是不会立即进行刷新操作,因此只是写到了操作系统的缓冲区。此时若操作系统发生宕机而没有即使的同步,也可能会丢失一部分数据。
可以看到,只有1才能真正地保证事务的持久性,但是由于刷新操作 fsync() 是阻塞的,直到完成后才返回,我们知道写磁盘的速度是很慢的,因此 MySQL 的性能会明显地下降。如果不在乎事务丢失,,0和2能获得更高的性能。
sync_binlog
该参数控制着二进制日志写入磁盘的过程。
该参数的有效值为0 、1、N:
0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。
1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。
N:每写N次操作系统缓冲就执行一次刷新操作。
将这个参数设为1以上的数值会提高数据库的性能,但同时会伴随数据丢失的风险。
二进制日志文件涉及到数据的恢复,以及想在主从之间获得最大的一致性,那么应该将该参数设置为1,但同时也会造成一定的性能损耗。
原文:https://www.cnblogs.com/klvchen/p/10861850.html
内容总结
以上是互联网集市为您收集整理的MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog全部内容,希望文章能够帮你解决MySQL 重要参数 innodb_flush_log_at_trx_commit 和 sync_binlog所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。