binlog的刷盘策略

mysql只有在事务提交的时候才会记录binlog日志,此时日志还在内存中,那binlog是什么时候被刷到磁盘中的呢?
mysql通过sync_binlog控制刷盘,取值范围0~n
0:不强制要求刷盘,由系统自行判断什么时候将binlog写入磁盘;
1:每次提交事务就将binlog写入磁盘;
n:每提交n个事务将binlog写入磁盘;

  • 显然,sync_binlog为1是最安全的,每次提交事务就将binlog写入磁盘,数据一致性最好。但实际情况中,往往为了提高数据库的性能,会将sync_binlog适当设大,来减少磁盘IO次数,用数据一致性换性能。
  • 在对数据库一致性要求不高或数据没那么重要的业务场景,完全可以把sync_binlog设置在100~1000范围内的某个值,以此来提高数据库的性能。而在对数据一致性要求高的业务场景或特别重要的数据,比如订单则建议将sync_binlog的值设置为1,这样可以保证哪怕数据库挂了也不会丢失数据。
  • sync_binlog的默认值是0,这时由系统会自行判断将binlog写入磁盘的时机。数据库可能会在空闲的时候综合考虑缓存的binlog日志大小来决定是否要将binlog写入磁盘。

你可能感兴趣的:(mysql)