InnoDB 重做日誌是事務持久化與崩潰恢復的核心機制。本文從原理出發,深入解析日誌大小對寫入效能與恢復時間的權衡,提供科學的計算方法與安全的修改流程。
類比文字編輯器的「復原/重做」功能:
innodb_flush_log_at_trx_commit 將日誌刷入磁碟 (重做日誌檔案)。| 日誌大小 | 寫入效能 | 崩潰恢復時間 |
|---|---|---|
| 小 | 頻繁觸發同步刷盤,效能差 | 日誌少,恢復快 |
| 大 | 緩衝充足,順序寫效能高 | 日誌多,恢復慢 |
步驟:
SHOW ENGINE INNODB STATUS\G 記錄 Log sequence number (LSN)。(LSN2 - LSN1) * 3600 / 1024 / 1024innodb_log_file_size 使總日誌量 (innodb_log_files_in_group × size) 覆蓋 1-2 小時寫入量。範例:採樣 60 秒寫入 2.6 GB/小時,innodb_log_files_in_group=2 (預設) → 單檔設 2.5GB,總計 5GB 覆蓋近 2 小時。
MySQL 5.6 之前 (需手動重建):
my.cnf 設定新 innodb_log_file_sizeSET GLOBAL innodb_fast_shutdown=0; SHUTDOWN;mv /var/lib/mysql/ib_logfile* /backup/MySQL 5.6.8+ / 5.7+ / 8.0:
SHOW ENGINE INNODB STATUS 觀察 Log sequence number 增長速率INNODB_METRICS 中 log_bytes_written 趨勢Log file ... did not exist: new 確認重建成功合理的重做日誌大小是寫入效能與恢復目標 (RTO) 的平衡點,建議每季度隨業務增長重新評估。