做者:丁儀html
來源:https://chengxuzhixin.com/blog/post/mysql_zhong_yao_ri_zhi_wen_jian_zong_jie.htmlmysql
日誌是全部應用的重要數據,MySQL 也有錯誤日誌、查詢日誌、慢查詢日誌、事務日誌等。本文簡單總結下各類日誌,以備查閱。sql
二進制日誌 binlog 用於記錄數據庫執行的寫入性操做(不包括查詢)信息,以二進制的形式保存在磁盤中。使用任何存儲引擎的 mysql 數據庫都會記錄 binlog 日誌。在 binlog 中記錄的是邏輯日誌,也就是 SQL 語句。SQL 語句執行後,binlog 追加到日誌文件中。能夠設置 binlog 文件大小,超過大小後,自動建立新的文件。數據庫
binlog 有三種格式,分別爲 STATMENT、ROW 和 MIXED。工具
在實際應用中,binlog 主要用於主從複製和數據恢復。主從複製是指在 master 機器開啓 binlog,經過某種方式把 binlog 發送給 slave 機器,slave 機器根據 binlog 內容進行數據操做,從而保證主從數據一致性。另外,經過使用 mysqlbinlog 工具能夠從 binlog 恢復數據。post
在 MySQL 5.7 以後,內置默認引擎已經變動爲 InnoDB 引擎。 InnoDB 引擎在處理事務時,能夠設置日誌寫入磁盤的時機,默認狀況下是每次 commit 時寫入磁盤。也能夠經過 sync_binlog 參數設置成系統自動判斷或每 N 個事務寫入一次。性能
查詢日誌記錄了全部數據庫請求的信息。不管這些請求是否獲得了正確的執行。開啓以後對性能有比較大的影響,所以使用很少。spa
慢查詢日誌用來記錄執行時間超過某個閾值的語句。執行時間閾值能夠經過 long_query_time 來設置,默認是 10 秒。慢查詢日誌須要手動開啓,對性能有一些影響,通常不建議開啓。慢查詢日誌支持將記錄寫入文件,也支持寫入數據庫表。3d
事務的四大特性之一是持久性。所以事務成功後,數據庫的修改永久保存,不能由於任何緣由而回到原來的狀態。redo log 是 InnoDB 引擎層實現的日誌,並非全部引擎都有,用來記錄事務對數據頁的修改,能夠在崩潰時用於恢復數據。redo log 包括內存中的日誌緩衝和磁盤上的日誌文件。執行 SQL 語句後,先寫入日誌緩衝,後續再一次性把多條緩衝寫入文件。日誌
在 InnoDB 中,數據頁也會刷盤,redo log 存在的意義主要就是下降對數據頁刷盤的要求。數據頁的變動,redo log 沒有必要所有保存。若是數據頁刷盤比 redo log 快,則 redo log 的記錄對於數據恢復意義不大;若是數據頁刷盤比 redo log 慢,則 redo log 中比數據頁快的部分能夠用來快速恢復數據。所以 redo log 日誌文件大小是固定的,當寫到結尾時,會回到開頭循環寫日誌。
事務的四大特性之一是原子性。對數據庫的一系列操做,要麼所有成功,要麼所有失敗,不容許部分紅功部分失敗。所以,須要記錄數據的邏輯變化。原子性經過 undo log 來實現,好比事務中執行一條 insert 語句,undo log 就會記錄一條 delete 語句;事務中執行一條 update 語句,undo log 就會記錄一條相反的 update 語句。這樣在事務失敗時,就能夠經過 undo log 來回滾到事務以前的狀態。
微.信.搜.一.搜.程序之心,每週一三五原創更新。