在mysql-5.6中innodb_flush_log_at_trx_commit的默认值为1.

mysql> show variables like "innodb_flush_log%";

+--------------------------------+-------+

| Variable_name                  | Value |

+--------------------------------+-------+

| innodb_flush_log_at_timeout    | 1     |

| innodb_flush_log_at_trx_commit | 1     |

+--------------------------------+-------+


取值范围一般可设置为0,1,2.

0代表log buffer以秒为单位刷写日志文件到本地磁盘,提交事务的时候不做任何操作。mysqld崩溃的时候会丢失最后一秒的事务。

1代表每次提交事务的时候,都会将log buffer刷写到日志。

2代表每次提交事务都会写(write)日志,但并不会执行刷(flush)的操作。定时刷到日志文件。但不能保证100%刷到磁盘。当系统崩溃或者断电时候才会丢失最后一秒的数据,innodb恢复时会忽略。


当使用source导入数据库时,效果比较明显,可以设置innodb_file_per_table = 1来查看文件,以对比所耗费时间。服务器1G内存,mysql的innodb_buffer_pool_size=600M时,设置为2,速度提升3倍多(sql文件800M)。对应查询速度变慢。