sync_binlog和innodb_flush_log_at_trx_commit的区别

innodb_flush_log_at_trx_commi  这个指的是写redo及后续操作,ib_logfile这个文件的刷新方式。

sync_binlog纯粹指的是binlog ,如 mysql-bin0003等。

基于innodb_flush_log_at_trx_commit 的三个参数的解释。

innodb_flush_log_at_trx_commit参数控制事务提交时写重做日志的行为方式,它有三个值:0、1和2。

(1)默认值为1,每次事务提交的时候都会将日志缓存中的数据写入到日志文件,同时还会触发文件系统到磁 盘的同步,如果发生系统崩溃,数据是零丢失,这种方式对数据是最安全的,但性能是最慢的,因为把数据从 缓存同步到磁盘的成本很高。这种方式适用于对数据安全性要求高的行业,如银行业。但很多互联网的应用, 对数据的安全性要求不太高,而对性能的要求很高,设置成0或2会更合适。

(2)设置成0时,事务提交的时候不会触发写日志文件的操作,日志缓存中的数据以每秒一次的频率写入到日 志文件中,同时还会进行文件系统到磁盘的同步操作。

(3)设置成2时,事务提交的时候会写日志文件,但文件系统到磁盘的同步是每秒进行一次。 0和2都是每秒进行一次文件系统到磁盘的同步,因此这两种方式的性能都差不多,当系统崩溃时,最多丢失1 秒的数据。但0和2还有细微的不同,当设置成2时,每次事务提交都写日志文件,因此数据已经从MySQL的日 志缓存刷新到了操作系统的文件缓存,如果只是MySQL崩溃,而操作系统没有崩溃,将不会丢失数据。因此0 和2比较起来,通常设置为2比较好。

性能最好的测试: 

  innodb_flush_log_at_trx_commit=2 

  sync_binlog=1000

sync_binlog:

该参数控制着二进制日志写入磁盘的过程。

该参数的有效值为0 、1、N:

0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。

1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。

N:每写N次操作系统缓冲就执行一次刷新操作。

将这个参数设为1以上的数值会提高数据库的性能,但同时会伴随数据丢失的风险。
二进制日志文件涉及到数据的恢复,以及想在主从之间获得最大的一致性,那么应该将该参数设置为1,但同时也会造成一定的性能损耗。

innodb_flush_method :

1. fsync:是默认值,使用fsync()系统调用刷新数据文件和日志文件,数据会在操作系统的缓存 中保存。

2. O_DSYNC:InnoDB使用O_SYNC打开和刷新日志文件,使用fsync()刷新数据文件。

3. O_DIRECT:使用O_DIRECT打开数据文件,使用fsync()系统调用刷新数据文件和日志文件, 数据不会在操作系统的缓存中保存。

4. O_DIRECT_NO_FSYNC:使用O_DIRECT刷新I/O,但写磁盘时不执行fsync()。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
解决MySQL主从延时的方法之一是通过临时修改sync_binlog参数和innodb_flush_log_at_trx_commit参数来实现。具体介绍如下: 1. sync_binlog参数: - 该参数用于控制二进制日志的同步方式。默认情况下,sync_binlog参数的值为1,表示每次事务提交时都会将二进制日志同步到磁盘上。 - 临时将sync_binlog参数设置为5000,意味着每隔5000个事务提交才会将二进制日志同步到磁盘上,从而减少了磁盘IO的频率,提高了性能。 - 但是,这样做也增加了数据丢失的风险,因为如果在两次同步之间发生故障,可能会丢失最近的5000个事务的数据。 2. innodb_flush_log_at_trx_commit参数: - 该参数用于控制InnoDB存储引擎的日志刷新策略。默认情况下,innodb_flush_log_at_trx_commit参数的值为1,表示每次事务提交时都会将日志刷新到磁盘上。 - 临时将innodb_flush_log_at_trx_commit参数设置为0,意味着每次事务提交时不会立即将日志刷新到磁盘上,而是由InnoDB引擎自行决定刷新的时机。 - 这样做可以提高性能,减少磁盘IO的频率,但也增加了数据丢失的风险,因为在发生故障时可能会丢失最近提交的事务的数据。 利弊如下: - 利:通过临时修改sync_binlog参数和innodb_flush_log_at_trx_commit参数,可以减少磁盘IO的频率,提高数据库的性能。 - 弊:临时修改这两个参数会增加数据丢失的风险,因为在发生故障时可能会丢失最近提交的事务的数据。此外,如果忘记还原这些参数的值,可能会导致数据不一致或数据丢失的问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东方-phantom

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

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

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

打赏作者

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

抵扣说明:

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

余额充值