Ⅰ mysql日誌文件詳解
MySQL資料庫的日誌文件主要分為三種類型:binlog日誌、redo日誌和undo日誌。
1. binlog日誌 作用:binlog日誌是MySQL上層產生的邏輯日誌,記錄了所有對MySQL資料庫執行更改的操作,主要適用於數據恢復、復制和審計。 配置參數: max_binlog_size:規定了單個日誌文件的最大值,達到後會生成新文件。 binlog_cache_size:二進制緩沖大小,影響性能。 sync_binlog:控制寫入磁碟的頻率。 binlog_format:決定日誌格式。
2. redo日誌 作用:redo日誌以物理格式記錄對每個頁的修改,實現事務的持久性。包含內存中的重做日誌緩沖和重做日誌文件。 參數:innodb_flush_log_at_trx_commit控制日誌刷新策略,包括不刷新、事務提交時刷新和在文件系統緩存中刷新。 結構:redo日誌以512位元組為單位,組成重做日誌塊和重做日誌組。LSN表示日誌總量、checkpoint位置和頁版本。InnoDB在啟動時會嘗試恢復LSN在checkpoint之後的數據。
3. undo日誌 作用:undo日誌用於恢復事務和實現MVCC,存儲在資料庫共享表空間中。 結構:每個回滾段記錄1024個undo log segment,由rollback segment文件、個數和文件數量構成。 事務處理:事務提交後,undo log會被放入鏈表等待purge操作最終刪除。redo日誌和undo日誌在事務過程中會產生,需要持久性保護。InnoDB在事務提交時會將undo log放入鏈表,並判斷undo頁是否可以重用,以供下個事務使用。purge線程最終完成update和delete操作。
這些日誌文件在MySQL資料庫的運行、備份、恢復、復制以及審計等方面扮演著關鍵角色,合理配置和管理這些日誌文件對於確保資料庫的穩定性和性能至關重要。