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 redolog写入log buffer就算提交完成了
当mysqld挂了就会丢数据。
性能最好,适用追求高性能,数据安全要求不高的场景,一般很少用。
Innodb_flush_log_at_trx_commit = 1
redolog写入log buffer,然后直接sync to disk(write through, fsync),提交才算完成了
完全支持ACID,保证数据安全
性能最差,适用对数据安全要求高的场景
Innodb_flush_log_at_trx_commit = 2
redolog写入log buffer,然后flush to OS Buffer,提交就算完成了(fflush),后续由mysqld线程每秒将OS Buffer sync to disk
当mysqld挂了没事,但机器挂了依然丢数据
性能还可以,但有风险,适用允许丢失部分数据的场景
性能最好的测试:
innodb_flush_log_at_trx_commit=2
sync_binlog=1000