问题参考自:https://www.zhihu.com/question/425704691/answer/1524724367 ,答案为个人原创
其实就是innodb_flush_log_at_trx_commit
和sync_binlog
两个参数设置,都设置为 1 就是双 1 设置。MySQL 默认配置就是双 1 配置。
innodb_flush_log_at_trx_commit
是 innodb
引擎的配置,sync_binlog
是 MySQL 引擎上层的配置,都是控制磁盘写入策略。
MySQL innoDB
引擎在事务 commit
之后:
fsync
)innodb_flush_log_at_trx_commit
:redo log 的刷盘策略,默认为 1
innodb_flush_log_at_trx_commit
设置为 0:log buffer
将每秒一次地写入log file
中,并且log file
的flush
(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作;innodb_flush_log_at_trx_commit
设置为 1:每次事务提交时MySQL
都会把log buffer
的数据写入log file
,并且flush
(刷到磁盘)中去;innodb_flush_log_at_trx_commit
设置为 2:每次事务提交时MySQL
都会把log buffer的数据写入log file
,但是flush
(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush
(刷到磁盘)操作。sync_binlog
:binlog 的刷盘策略,默认为0
binary log
。sync_binlog = N (N>0)
,MySQL 在每写 N 次 二进制日志binary log
时,会使用fdatasync()
函数将它的写二进制日志binary log
同步到磁盘中去。