mysql的幾種日誌記錄

2022-08-24 22:51:11 字數 2779 閱讀 1148

作用:

確保事務的永續性。

防止在發生故障的時間點,尚有髒頁未寫入磁碟,在重啟mysql服務的時候,根據redo log進行重做,從而達到事務的永續性這一特性。

內容:物理格式的日誌,記錄的是物理資料頁面的修改的資訊,其redo log是順序寫入redo log file的物理檔案中去的。

什麼時候產生:

事務開始之後就產生redo log,redo log的落盤並不是隨著事務的提交才寫入的,而是在事務的執行過程中,便開始寫入redo log檔案中。

什麼時候釋放:

當對應事務的髒頁寫入到磁碟之後,redo log的使命也就完成了,重做日誌占用的空間就可以重用(被覆蓋)。

對應的物理檔案:

預設情況下,對應的物理檔案位於資料庫的data目錄下的ib_logfile1&ib_logfile2

innodb_log_group_home_dir 指定日誌檔案組所在的路徑,預設./ ,表示在資料庫的資料目錄下。

innodb_log_files_in_group 指定重做日誌檔案組中檔案的數量,預設2

關於檔案的大小和數量,由一下兩個引數配置:

innodb_log_file_size 重做日誌檔案的大小。

innodb_mirrored_log_groups 指定了日誌映象檔案組的數量,預設1

其他:很重要一點,redo log是什麼時候寫盤的?前面說了是在事物開始之後逐步寫盤的。

之所以說重做日誌是在事務開始之後逐步寫入重做日誌檔案,而不一定是事務提交才寫入重做日誌快取,

原因就是,重做日誌有乙個快取區innodb_log_buffer,innodb_log_buffer的預設大小為8m(這裡設定的16m),innodb儲存引擎先將重做日誌寫入innodb_log_buffer中。

作用:儲存了事務發生之前的資料的乙個版本,可以用於回滾,同時可以提供多版本併發控制下的讀(mvcc),也即非鎖定讀

內容:邏輯格式的日誌,在執行undo的時候,僅僅是將資料從邏輯上恢復至事務之前的狀態,而不是從物理頁面上操作實現的,這一點是不同於redo log的。

什麼時候產生:

事務開始之前,將當前是的版本生成undo log,undo 也會產生 redo 來保證undo log的可靠性

什麼時候釋放:

當事務提交之後,undo log並不能立馬被刪除,

而是放入待清理的鍊錶,由purge執行緒判斷是否由其他事務在使用undo段中表的上乙個事務之前的版本資訊,決定是否可以清理undo log的日誌空間。

對應的物理檔案:

mysql5.6之前,undo表空間位於共享表空間的回滾段中,共享表空間的預設的名稱是ibdata,位於資料檔案目錄中。

mysql5.6之後,undo表空間可以配置成獨立的檔案,但是提前需要在配置檔案中配置,完成資料庫初始化後生效且不可改變undo log檔案的個數

如果初始化資料庫之前沒有進行相關配置,那麼就無法配置成獨立的表空間了。

關於mysql5.7之後的獨立undo 表空間配置引數如下

innodb_undo_directory = /data/undospace/ --undo獨立表空間的存放目錄

innodb_undo_logs = 128 --回滾段為128kb

innodb_undo_tablespaces = 4 --指定有4個undo log檔案

作用:用於複製,在主從複製中,從庫利用主庫上的binlog進行重播,實現主從同步。

用於資料庫的基於時間點的還原。

內容:邏輯格式的日誌,可以簡單認為就是執行過的事務中的sql語句。

但又不完全是sql語句這麼簡單,而是包括了執行的sql語句(增刪改)反向的資訊,也就意味著delete對應著delete本身和其反向的insert;update對應著update執行前後的版本的資訊;insert對應著delete和insert本身的資訊。

在使用mysqlbinlog解析binlog之後一些都會真相大白。

因此可以基於binlog做到類似於oracle的閃回功能,其實都是依賴於binlog中的日誌記錄。

什麼時候產生:

事務提交的時候,一次性將事務中的sql語句(乙個事物可能對應多個sql語句)按照一定的格式記錄到binlog中。

這裡與redo log很明顯的差異就是redo log並不一定是在事務提交的時候重新整理到磁碟,redo log是在事務開始之後就開始逐步寫入磁碟。

因此對於事務的提交,即便是較大的事務,提交(commit)都是很快的,但是在開啟了bin_log的情況下,對於較大事務的提交,可能會變得比較慢一些。

這是因為binlog是在事務提交的時候一次性寫入的造成的,這些可以通過測試驗證。

什麼時候釋放:

binlog的預設是保持時間由引數expire_logs_days配置,也就是說對於非活動的日誌檔案,在生成時間超過expire_logs_days配置的天數之後,會被自動刪除。

對應的物理檔案:

配置檔案的路徑為log_bin_basename,binlog日誌檔案按照指定大小,當日誌檔案達到指定的最大的大小之後,進行滾動更新,生成新的日誌檔案。

對於每個binlog日誌檔案,通過乙個統一的index檔案來組織。

慢日誌記錄執行時間過長和沒有使用索引的查詢語句,報錯select、update、delete以及insert語句,慢日誌只會記錄執行成功的語句。
show variables like 「long_query_time」;預設10s

檢視慢查詢日誌路徑:

show variables like 「%slow%」;

開啟慢日誌

set global slow_query_log=1;

mysql的幾種日誌

mysql有以下幾種日誌 錯誤日誌 log err 查詢日誌 log 慢查詢日誌 log slow queries 更新日誌 log update 二進位制日誌 log bin 是否啟用了日誌 mysql show variables like log 怎樣知道當前的日誌 mysql show ma...

MYSQL的幾種日誌

錯誤日誌 log err 查詢日誌 log 慢查詢日誌 log slow queries 更新日誌 log update 二進位制日誌 log bin 在mysql的安裝目錄下,開啟my.ini,在後面加上上面的引數,儲存後重啟mysql服務就行了。例如 enter a name for the b...

Nginx 記錄日誌的幾種方法

nginx的日誌記錄主機設定 server 預設情況下,access log 會使用 combined 的配置來記錄訪問日誌 通常這樣就足夠了。如果是為了更加方便的日誌分析,通常我們會使用特殊字元 如 a 來作為日誌欄位的分隔符,這樣無論是過濾還是排序都會十分方便。甚至可以直接匯入 mysql hi...