Command-Line: --innodb_flush_log_at_trx_commit[=#] Config-File: innodb_flush_log_at_trx_commit Scope: Global | Dynamic: Yes | Type: numeric Default: 1 | Valid: 0, 1, 2
| 值 | Log Buffer 寫入 Log File | Flush 到磁盤 | 事務提交時動作 | 數據安全性 | 性能 |
|---|---|---|---|---|---|
| 0 | 每秒 1 次 | 每秒 1 次 | 無動作 | mysqld 崩潰丟失 1 秒事務 | 最快 |
| 1(默認) | 每次提交 | 每次提交 | 寫入 + Flush | ACID 完全合規 | 最慢 |
| 2 | 每次提交 | 每秒 1 次 | 寫入(不 Flush) | 僅 OS 崩潰/斷電丟失 1 秒 | 折中 |
註:每秒 Flush 非 100% 保證,受進程調度影響。
1 為 ACID 合規必要值為達最大持久性與一致性,Master my.cnf 同時設置:
innodb_flush_log_at_trx_commit = 1 sync_binlog = 1
| 值 | 行為 |
|---|---|
| 0(默認) | 依賴 OS 刷盤,不主動同步 |
| 1 | 每次事務/語句提交 fdatasync() 強制刷盤,最安全最慢 |
| N>1 | 每 N 次寫入同步一次 |
帶電池備援的 RAID 卡/磁盤緩存可大幅降低 sync_binlog=1 的性能損耗。
innodb_flush_log_at_trx_commit=1 也可能丟數據hdparm 關閉寫緩存、廠商專用工具fdatasync():僅刷數據緩衝區,不更新元數據(如 atime),比 fsync() 輕量