這篇文章主要介紹了MySQL記錄檔詳解,本文分別講解了錯誤記錄檔、二進位日誌、通用查詢日誌、慢查詢日誌、Innodb的線上redo日誌、更新日誌等日誌類型和作用介紹,需要的朋友可以參考下
概述
記錄檔是MySQL資料庫的重要組成部分。MySQL有幾種不同的記錄檔,通常包括錯誤記錄檔檔案,二進位日誌,通用日誌,慢查詢日誌,等等。這些日誌可以協助我們定位mysqld內部發生的事件,資料庫效能故障,記錄資料的變更曆史,使用者恢複資料庫等等。本文主要描述MySQL的各種記錄檔。
MySQL記錄檔分類
1.錯誤記錄檔(Error Log)
2.二進位日誌(Binary Log & Binary Log Index)
3.通用查詢日誌(query log)
4.慢查詢日誌(slow query log)
5.Innodb的線上 redo 日誌(innodb redo log)
6.更新日誌(update log)
錯誤記錄檔
錯誤記錄檔記錄了MyQL Server運行過程中所有較為嚴重的警告和錯誤資訊,以及MySQL
Server 每次啟動和關閉的詳細資料。在預設情況下,系統記錄錯誤記錄檔的功能是關閉的, 錯誤資訊被輸出到標準錯誤輸出(stderr) ,如果要開啟系統記錄錯誤記錄檔的功能,需要在啟動時開啟-log-error 選項。錯誤記錄檔的預設存放位置在資料目錄下,以hostname.err 命 名。但是可以使用命令:—log-error[=file_name],修改其存放目錄和檔案名稱。
為了方便維護需要, 有時候會希望將錯誤記錄檔中的內容做備份並重新開始記錄, 這候時 就可以利用 MySQL 的 FLUSH LOGS 命令來告訴 MySQL 備份舊記錄檔並產生新的記錄檔。 備份檔案名以“.old”結尾。
二進位日誌
二進位日誌,也就是我們常說的 binlog,也是 MySQL Server 中最為重要的日誌之一。
當我們通過“—log-bin[=file_name]”開啟了記錄的功能之後,MySQL 會將所有修改資料 庫資料的 query 以二進位形式記錄到記錄檔中。 當然, 日誌中並不僅限於query 語句這麼 簡單, 還包括每一條query 所執行的時間, 所消耗的資源, 以及相關的事務資訊,bi所nl以og 是事務安全的。
和錯誤記錄檔一樣,binlog 記錄功能同樣需要“—log-bin[=file_name]”參數的顯式指 定才能開啟, 如果未指定file_name, 則會在資料目錄下記錄為mysql-bin.** (*代表0~ 9 之間的某一個數字,來表示該日誌的序號)。
binlog 還有其他一些附加選項參數:
“—max_binlog_size”設定 binlog 的最大儲存上限,當日誌達到該上限時,MySQL 會 重新建立一個日誌開始繼續記錄。不過偶爾也有超出該設定的binlog 產生,一般都是因為 在即將達到上限時,產生了一個較大的事務,為了保證事務安全,MySQL 不會將同一個事務 分開記錄到兩個 binlog 中。
“—binlog-do-db=db_name”參數明確告訴 MySQL,需要對某個(db_name)資料庫記 錄 binlog,如果有了“—binlog-do-db=db_name”參數的顯式指定,MySQL 會忽略針對其他 資料庫執行的 query,而僅僅記錄針對指定資料庫執行的query。
“—binlog-ignore-db=db_name”與“—binlog-do-db=db_name”完全相反, 它顯式指 定忽略某個(db_name)資料庫的binlog 記錄,當指定了這個參數之後,MySQL 會記錄指定 資料庫以外所有的資料庫的 binlog。
“—binlog-ignore-db=db_name”與“—binlog-do-db=db_name”兩個參數有一個共同 的概念需要大家理解清楚,參數中的db_name 不是指 query 語句更新的資料所在的資料庫, 而是執行 query 的時候當前所處的資料庫。 不論更新哪個資料庫的資料,MySQL 僅僅比較當 前串連所處的資料庫(通過use db_name切換後所在的資料庫)與參數設定的資料庫名,而 不會分析 query 語句所更新資料所在的資料庫。
mysql-bin.index 檔案(binary log index)的功能是記錄所有Binary Log的絕對路 徑,保證 MySQL 各種線程能夠順利的根據它找到所有需要的Binary Log 檔案。
通用查詢日誌
查詢日誌記錄 MySQL 中所有的 query,通過“—log[=fina_name]”來開啟該功能。由
於記錄了所有的 query,包括所有的 select,體積比較大,開啟後對效能也有較大的影響, 所以請大家慎用該功能。 一般只用於跟蹤某些特殊的sql 效能問題才會短暫開啟該功能。預設的查詢記錄檔名為 hostname.log。
慢查詢日誌
顧名思義,慢查詢日誌中記錄的是執行時間較長的 query,也就是我們常說的 slow
query,通過設 —log-slow-queries[=file_name]來開啟該功能並設定記錄位置和檔案名稱, 預設檔案名稱為 hostname-slow.log,預設目錄也是資料目錄。
慢查詢日誌採用的是簡單的文字格式設定, 可以通過各種文字編輯器查看其中的內容。中其 記錄了語句執行的時刻,執行所消耗的時間,執行使用者,串連主機等相關資訊。MySQL 還提 供了專門用來分析滿查詢日誌的工具程式mysqlslowdump, 用來協助資料庫管理員解決可 能存在的效能問題。
Innodb的線上redo日誌
Innodb 是一個事務安全的儲存引擎, 其事務安全性主要就是通過線上redo 日誌和記錄
在資料表空間中的 undo 資訊來保證的。redo 日誌中記錄了 Innodb 所做的所有物理變更和事務 資訊, 通過redo 日誌和 undo 資訊, Innodb 保證了在任何情況下的事務安全性。Innodb 的redo 日誌同樣預設存放在資料目錄下, 可以通過innodb_log_group_home_dir來更改設定日誌的 存放位置,通過 innodb_log_files_in_group 設定日誌的數量。
更新日誌
更新日誌是 MySQL 在較老的版本上使用的,其功能和 binlog 基本類似,只不過不是以
二進位格式來記錄而是以簡單的文字格式設定記錄內容。自從 MySQL增加了binlog功能之後, 就很少使用更新日誌了。從版本5.0 開始,MySQL 已經不再支援更新日誌了。
總結
本篇文章整理了MySQL中的各種記錄檔,每種記錄檔都用其特定的用途,這些會在以後的文章中進行描述。