1. 程式人生 > 資料庫 >mysql 重要日誌檔案彙總

mysql 重要日誌檔案彙總

作者:丁儀

來源:https://chengxuzhixin.com/blog/post/mysql_zhong_yao_ri_zhi_wen_jian_zong_jie.html

日誌是所有應用的重要資料,MySQL 也有錯誤日誌、查詢日誌、慢查詢日誌、事務日誌等。本文簡單總結下各種日誌,以備查閱。

二進位制日誌 binlog

二進位制日誌 binlog 用於記錄資料庫執行的寫入性操作(不包括查詢)資訊,以二進位制的形式儲存在磁碟中。使用任何儲存引擎的 mysql 資料庫都會記錄 binlog 日誌。在 binlog 中記錄的是邏輯日誌,也就是 SQL 語句。SQL 語句執行後,binlog 追加到日誌檔案中。可以設定 binlog 檔案大小,超過大小後,自動建立新的檔案。

binlog 有三種格式,分別為 STATMENT、ROW 和 MIXED。

  • STATMENT:把會修改資料的 sql 語句記錄到 binlog 中;是 MySQL 5.7.7 之前的預設格式;
  • ROW:不記錄每條 sql 語句的上下文資訊,僅記錄哪條資料被修改了;是 MySQL 5.7.7之後的預設格式;
  • MIXED:基於 STATMENT 和 ROW 兩種模式的混合複製,一般使用 STATEMENT 模式,對於無法複製的操作使用 ROW 模式;

在實際應用中,binlog 主要用於主從複製和資料恢復。主從複製是指在 master 機器開啟 binlog,通過某種方式把 binlog 傳送給 slave 機器,slave 機器根據 binlog 內容進行資料操作,從而保證主從資料一致性。另外,通過使用 mysqlbinlog 工具可以從 binlog 恢復資料。

在 MySQL 5.7 之後,內建預設引擎已經變更為 InnoDB 引擎。 InnoDB 引擎在處理事務時,可以設定日誌寫入磁碟的時機,預設情況下是每次 commit 時寫入磁碟。也可以通過 sync_binlog 引數設定成系統自動判斷或每 N 個事務寫入一次。

查詢日誌

查詢日誌記錄了所有資料庫請求的資訊。無論這些請求是否得到了正確的執行。開啟之後對效能有比較大的影響,因此使用不多。

慢查詢日誌

慢查詢日誌用來記錄執行時間超過某個閾值的語句。執行時間閾值可以通過 long_query_time 來設定,預設是 10 秒。慢查詢日誌需要手動開啟,對效能有一些影響,一般不建議開啟。慢查詢日誌支援將記錄寫入檔案,也支援寫入資料庫表。

事務日誌 redo log

事務的四大特性之一是永續性。因此事務成功後,資料庫的修改永久儲存,不能因為任何原因而回到原來的狀態。redo log 是 InnoDB 引擎層實現的日誌,並不是所有引擎都有,用來記錄事務對資料頁的修改,可以在崩潰時用於恢復資料。redo log 包括記憶體中的日誌緩衝和磁碟上的日誌檔案。執行 SQL 語句後,先寫入日誌緩衝,後續再一次性把多條緩衝寫入檔案。

在 InnoDB 中,資料頁也會刷盤,redo log 存在的意義主要就是降低對資料頁刷盤的要求。資料頁的變更,redo log 沒有必要全部儲存。如果資料頁刷盤比 redo log 快,則 redo log 的記錄對於資料恢復意義不大;如果資料頁刷盤比 redo log 慢,則 redo log 中比資料頁快的部分可以用來快速恢復資料。因此 redo log 日誌檔案大小是固定的,當寫到結尾時,會回到開頭迴圈寫日誌。

mysql 重要日誌檔案彙總

事務日誌 undo log

事務的四大特性之一是原子性。對資料庫的一系列操作,要麼全部成功,要麼全部失敗,不允許部分成功部分失敗。因此,需要記錄資料的邏輯變化。原子性通過 undo log 來實現,比如事務中執行一條 insert 語句,undo log 就會記錄一條 delete 語句;事務中執行一條 update 語句,undo log 就會記錄一條相反的 update 語句。這樣在事務失敗時,就可以通過 undo log 來回滾到事務之前的狀態。

以上就是mysql 重要日誌檔案彙總的詳細內容,更多關於MySQL 日誌檔案的資料請關注我們其它相關文章!