innodb_flush_log_at_trx_commit和sync_binlog 参数说明

本文详细介绍了MySQL中InnoDB引擎的innodb_flush_log_at_trx_commit参数及binlog的sync_binlog参数的设置与影响。阐述了不同设置下对数据持久性和一致性的影响,并讨论了操作系统与硬件对flush操作的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

innodb_flush_log_at_trx_commit  写的是redo log


sync_binlog 写的binlog


如果 innodb_flush_log_at_trx_commit的值是0,log buffer 被写出到log 文件 是一秒一次


flush 到disk的操作被执行在log 文件上,但是在事务提交的时候什么都不做。


当值是1 的时候(默认的), log buffer 被写入到log file 是每个事务提交的时候,写出到磁盘操作被执行。



当值是2的时候,log buffer 是写出到文件在每次提交的时候,但是flush 到磁盘操作是不执行的。


然而, flush日志发生是一秒一次 当值为2的时候。


注意 一秒一次flush 不是100%强制发生的,由于进程调度原因。

默认值1是为了保证完整的ACID, 你可以得到更好的性能通过设置值不为1,

但是在系统崩溃的时候,你将会丢失1秒的数据。

设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。


设为2的话,只有当操作系统 crash 或者断电会 丢失最后1秒的事务。

然而, InnoDB做 crash 恢复是不受影响的 因此crash recovery 做恢复的时候 会忽略这个值)

为最大可能的耐久性和一致性的复制设置 使用了InnoDB 的事务环境

use innodb_flush_log_at_trx_commit = 1 and sync_binlog = 1


小心:

很多的操作系统和一些磁盘硬件欺骗flush-to-disk操作。

它们可能告诉mysqld flush已经发生, 尽管它还没有。

然后交易的耐久性是不强制的 尽管设置为1, 最坏的情况能corrupt the InnoDB database。


使用电池备份磁盘高速缓存的SCSI 盘控制器或者 在磁盘本身加快文件刷新




如果sync_binlog值大于0, MYSQL server 同步它的binary log 到磁盘(使用fdatasync())

在每次sync_binlog 写到binary log.如果自动提交启用,会把每个语句写到binary log里


默认值是0,不是同步写到磁盘的 在这种情况下, server 依赖操作系统来flush binary log的内存


值设为1 是安全的选择,由于crash 你最多丢失一个语句或者事务。然而,那也是最慢的选择

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scan724

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值