共计 1143 个字符,预计需要花费 3 分钟才能阅读完成。
这篇文章主要介绍了 mysql 中 sync_binlog 和 innodb_flush_log_at_trx_commit 怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。
sync_binlog:
其值默认为 0,范围为 0~4294967295(mysql 5.6)
〇 为 0 时,即 mysqld 不去控制磁盘的同步,而是等待操作系统的 fdatasync 从内存 flush 到磁盘。(与操作系统同步)。在复制结构中,dump 线程会在 flush 阶段进行 binlog 传输。
〇 最安全的设置为 1,在开启了 autocommit 的情况下,如果 mysqld 或者 os 此时 crash 掉,会至多遗失一个事务。(同时也是最慢的设置)。在复制结构中,dump 线程会在 sync 阶段进行 binlog 传输。
〇 当值为范围内其他值时,如 100,即意味着 mysql 在写 100 次 binlog 时,再将缓存刷到磁盘。在复制结构中,dump 线程会在 flush 阶段进行 binlog 传输。
将该值设置为稍大的情况下,可以提高 tps,并且需要使用 battery-backed cache 防止异常断电。
innodb_flush_log_at_trx_commit:
(控制 REDO log 刷盘策略)
其默认值为 1,其他可取值为 0 和 2。
〇 当为 1 时,每个事务提交,将会使 log buffer 的内容写到 log file 中,同时将被 flush 到磁盘,这也是最安全的做法。可以完全遵从 ACID。(the contents of the InnoDB log buffer are written out to the log file at each transaction commit and the log file is flushed to disk.)
〇 当为 0 时,每个事务提交,会写入 mysqld 自己的 log buffer 中,每隔 1 秒将 log buffer 的内容写到 log file 中,然后 flush 到磁盘。
〇 当为 2 时,每个事务提交,就会被写到 log file(OS cache),但是 log file 每隔 1 秒才会被 flush 到磁盘,当操作系统 crash 或断电时,此时至多丢失 1 秒的事务。
0 和 2 的区别是,
为 0 时,mysqld 或操作系统 crash 则会导致 1 秒内的事务被丢失。
为 2 时,当操作系统 crash 或断电会导致 1 秒内的事务被丢失。
性能而言(由快至慢):
0 2 1
安全性而言(由好至差):
1 2 0
感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“mysql 中 sync_binlog 和 innodb_flush_log_at_trx_commit 怎么用”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!