write和fsync的时机就是由参数sync_binlog来进行控制的
1、当sync_binlog=0的时候,表示每次提交事务都只write,不fsync
2、当sync_binlog=1的时候,表示每次提交事务都执行fsync
3、当sync_binlog=N的时候,表示每次提交事务都write,但积累N个事务后才fsync
比如innodb_flush_log_at_trx_commit= 1
表示每一次的事务提交是否需要把日志都写入磁盘,这是很浪费时间的,一共有三个属性值:
0(每次写到服务缓存,一秒钟刷写一次)
1(每次事务提交都刷写一次磁盘)
2(每次写到os缓存,一秒钟刷写一次)
一般情况下我们推荐设置成2,这样就算mysql的服务宕机了,卸载os缓存中的数据也会进行持久化。