MySQL · 配置参数 · innodb_flush_log_at_trx_commit

参数说明

innodb_flush_log_at_trx_commit:控制 ib_logfile 日志(记录 redo log undo log 信息)的刷新方式。

Property Value
Command-Line Format --innodb-flush-log-at-trx-commit=#
System Variable innodb_flush_log_at_trx_commit
Scope Global
Dynamic Yes
Type Enumeration
Default Value 1
Valid Values 0 1 2
  • innodb_flush_log_at_trx_commit = 0,表示每隔 1 秒把 log buffer 刷到 log file 中去,并且同时调用文件系统的 flush 操作将缓存刷新到磁盘上去。也就是说一秒之前的日志都保存在日志缓冲区,也就是内存上,在mysqld 进程崩溃的情况下,可能丢失 1 秒的事务数据。
  • innodb_flush_log_at_trx_commit = 1,表示在每次事务提交后,会把 log buffer 刷到 log file 中去,并且调用文件系统的 flush 操作将缓存刷新到磁盘上去。
  • innodb_flush_log_at_trx_commit = 2,表示在每次事务提交后,会把 log buffer 刷到 log file 中去,但并不会立即刷写到磁盘。只有在数据库所在的主机操作系统损坏或者突然掉电的情况下,可能丢失 1 秒的事务数据。

设置

  • 性能:0 > 2 > 1
  • 安全:1 > 2 >0
  • 推荐:区分业务场景进行设置
1
2
# 支付场景:innodb_flush_log_at_trx_commit = 1
# 其他场景:innodb_flush_log_at_trx_commit = 2