1. 程式人生 > >msyql 日誌分類、儲存、啟動,慢查詢日誌(一)

msyql 日誌分類、儲存、啟動,慢查詢日誌(一)

Mysql日誌的分類:

出錯日誌(error log):(log_error)這個日誌記載著伺服器啟動和關閉的情況,還記載著關於故障或異常狀況的訊息。

我們安裝完資料庫之後,啟動資料庫如果發生異常,我們應該首先查這個日誌檔案。

常規查詢日誌:(log)該日誌包括客戶連線的記錄,來自客戶的SQL查詢和其他的各種事件。一般我們可以用其來監視使用者的活動,誰在連線,從哪連線,執行哪些操作

慢查詢日誌:(slow_query_log)該日誌用於改進查詢效能,慢是有時間定義的,用變數(long_query_time)來配置,預設值是2.0,單位是秒,這個慢還取決你伺服器,比如伺服器的負載高時,可能查詢速度就會下降,原本不是慢查詢的語句,也會被寫入到慢查詢日誌中。

二進位制日誌(binary log):(log_bin)這個日誌由多個檔案構成,裡面記錄著由update,delete,insert,create table, drop table,grant等語句完成的資料修改,二進位制日誌是一些二進位制編碼的資料修改“事件”,它有一套配套的索引檔案,裡面列出了伺服器上現有的二進位制日誌檔案

二進位制日誌索引檔案:(log_bin_index)記錄著伺服器上現有的二進位制日誌檔案,它可以配合資料庫備份檔案在系統發生崩潰後對資料表進行恢復,先從備份檔案恢復資料庫,然後使用mysqlbinlog工具把二進位制日誌的內容轉換為文字語句,接下來把上次備份後執行的過的每一條資料修改語句依次執行,達到恢復到資料庫崩潰前的狀態。

mysql的複製機制:就是通過二進位制日誌把主伺服器上發生的資料修改事件傳到從伺服器上去

中繼日誌:(relay_log)在主從架構時,一般在從伺服器上會維護一箇中繼日誌,裡面記載著從主伺服器上接收的、目前尚未執行的資料修改事件,中繼日誌和二進位制日誌的格式是一樣的,並且也有一個配套的索引檔案,其列出了從伺服器上現有的中繼日誌檔案。

中繼日誌索引檔案:(relay_log_index)列出了從伺服器上現有的中繼日誌檔案。

日誌的儲存:

在5.1.20版本之後:日誌除了被寫入檔案中還可以有如下的儲存方式:

出錯日誌:可以傳送到syslog

常規日誌:可以寫到mysql資料庫中的資料庫表中

慢查詢日誌:可以寫到mysql資料庫中的資料庫表中

注:如果我們沒有配置,預設mysql伺服器是不會建立任何日誌,但是兩種特例除外:

1.在Unix作業系統中:如果用mysqld_safe來啟動伺服器,該指令碼將創建出錯日誌,並告訴伺服器去使用它

2.在Windows作業系統中:只要沒有使用--console選項來表明讓出錯資訊傳送到控制檯而不是被髮送到檔案,那麼伺服器就會創建出錯日誌

注:如果出錯日誌檔案已經存在,但是用來登入伺服器的賬號沒有寫許可權,mysql服務將會啟動失敗,並且沒有任何報錯訊息被寫入日誌

使用mysqld_safe啟動資料庫伺服器時,如何將出錯日誌資訊傳送到syslog,而不是傳送到一個日誌檔案:

使用--syslog 引數代替--log_error——mysql技術內幕,但是在5.6中沒有查到該引數

Windows上的出錯日誌:

在Windows上,mysql把錯誤日誌預設寫到資料目錄的HOSTNAME.ERR檔案中,但是如果在啟動時,你使用了引數--console,那麼此時mysql將會把錯誤資訊列印在控制檯,同時不會再寫入錯誤檔案裡。

但是:如果你的mysql被安裝成Windows的一項服務了,這時再使用--console將沒有任何效果,因為它找不到控制檯去輸出。。。

日誌的啟用方式:

1.使用引數的方式:下面是本人在mysql5.6中可使用的引數名稱:

引數 含義 含義
--log_error: (出錯日誌) path+file 日誌檔案存放路徑
--log 常規日誌 path+file
--slow_query_log 是否開啟慢查詢日誌 on/off 開關
--slow_query_log_file 慢查詢日誌檔案儲存名稱 path+file 慢查詢檔案儲存路徑和名稱
--log_bin 是否開啟二進位制日誌 on/off 開關
--log_bin_basename 二進位制日誌的檔名 path+file
--log_bin_index 二進位制日誌索引檔案 path+file
--relay_log 是否開啟中繼日誌 on/off
--relay_log_basename 中繼日誌檔名 path+file
--relay_log_index 中繼日誌索引檔案 path+file

更多命令可使用:show variables like "%log%";來查詢

注:配置日誌的時候,如果沒有檔案,那麼mysql會自動建立該檔案,但是如果沒有對應的子目錄,mysql是不會自動建立子目錄的