MySQL innodb_flush_log_at_trx_commit参数的设置(新手必看)
在 [mysqld] 中,对 innodb_flush_log_at_trx_commit 参数的定义如下:
对该参数的设置可以在数据库的性能与数据库的安全之间进行折中:
innodb_flush_log_at_trx_commit 参数只有 3 个值,默认值为 1,也是最安全的设置。出于性能考虑,可以设置为 0 或者 2,但会在数据库崩溃的时候丢失一秒钟的事务。为了保证事务的持久性和复制设置的一致性,建议将这个参数设置为 1。
[root@localhost~]#mysqld --verbose --help|grep "\-\-innodb_flush_log_at_trx_commit" -A 3 --innodb_flush_log_at_trx_commit[=#] Set to 0 (write and flush once per second), 1 (write and flush at each commit) or 2 (write at commit, flush once per second).该参数用来控制将缓冲区的数据写入日志文件和将日志文件数据刷新到磁盘的操作时间。
对该参数的设置可以在数据库的性能与数据库的安全之间进行折中:
- 当该参数设置为 0 时,日志缓存每秒一次地被写入日志文件中,并且将日志文件数据刷新到磁盘;
- 当该参数设置为 1 时,InnoDB的事务日志在每次提交后写入日志文件,并对日志做刷新到磁盘的操作。这个可以做到不丢失任何一个事务;
- 当该参数设置为 2 时,在每个事务提交时,日志缓存被写入日志文件,但不对日志文件做刷新到磁盘的操作,对日志文件的刷新也是每秒发生一次。需要注意的是,由于进程调度方面的原因,并不能保证日志文件的刷新操作每秒一定会发生。
innodb_flush_log_at_trx_commit 参数只有 3 个值,默认值为 1,也是最安全的设置。出于性能考虑,可以设置为 0 或者 2,但会在数据库崩溃的时候丢失一秒钟的事务。为了保证事务的持久性和复制设置的一致性,建议将这个参数设置为 1。