参数说明
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 | # 支付场景:innodb_flush_log_at_trx_commit = 1 |