首頁 > 軟體

淺談MySQL中的六種紀錄檔

2022-03-23 13:03:24

(一)概述

MySQL中存在著以下幾種紀錄檔:重寫紀錄檔(redo log)、回滾紀錄檔(undo log)、二進位制紀錄檔(bin log)、錯誤紀錄檔(error log)、慢查詢紀錄檔(slow query log)、一般查詢紀錄檔(general log)。

MySQL中的資料變化會體現在上面這些紀錄檔中,比如事務操作會體現在redo log、undo log以及bin log中,資料的增刪改查會體現在 binlog 中。本章是對MySQL紀錄檔檔案的概念及基本使用介紹,不涉及底層內容。針對開發人員而言,這幾種紀錄檔中最有可能使用到的是慢查詢紀錄檔。

(二)redo log

redo log是一種基於磁碟的資料結構,用來在MySQL宕機情況下將不完整的事務執行資料糾正,redo紀錄檔記錄事務執行後的狀態。

當事務開始後,redo log就開始產生,並且隨著事務的執行不斷寫入redo log file中。redo log file中記錄了xxx頁做了xx修改的資訊,我們都知道資料庫的更新操作會在記憶體中先執行,最後刷入磁碟。

redo log就是為了恢復更新了記憶體但是由於宕機等原因沒有刷入磁碟中的那部分資料。

(三)undo log

undo log主要用來回滾到某一個版本,是一種邏輯紀錄檔。undo log記錄的是修改之前的資料,比如:當delete一條記錄時,undolog中會記錄一條對應的insert記錄,從而保證能恢復到資料修改之前。在執行事務回滾的時候,就可以通過undo log中的記錄內容並以此進行回滾。

undo log還可以提供多版本並行控制下的讀取(MVCC)。

(四)bin log

MySQL的bin log紀錄檔是用來記錄MySQL中增刪改時的記錄紀錄檔。簡單來講,就是當你的一條sql操作對資料庫中的內容進行了更新,就會增加一條bin log紀錄檔。查詢操作不會記錄到bin log中。bin log最大的用處就是進行主從複製,以及資料庫的恢復。

通過下面的命令可以檢視是否開啟binlog紀錄檔

show VARIABLES like '%log_bin%'

開啟binlog的方式如下:

log-bin=mysql-bin
server-id=1
binlog_format=ROW

其中log-bin指定紀錄檔檔案的名稱,預設會放到資料庫目錄下,可通過以下命令檢視

show VARIABLES like '%datadir%'

(五)error log

error log主要記錄MySQL在啟動、關閉或者執行過程中的錯誤資訊,在MySQL的組態檔my.cnf中,可以通過log-error=/var/log/mysqld.log 執行mysql錯誤紀錄檔的位置。

通過MySQL的命令

 show variables like "%log_error%";

也可以獲取到錯誤紀錄檔的位置。

(六)slow query log

慢查詢紀錄檔用來記錄執行時間超過指定閾值的SQL語句,慢查詢紀錄檔往往用於優化生產環境的SQL語句。可以通過以下語句檢視慢查詢紀錄檔是否開啟以及紀錄檔的位置:

 show variables like "%slow_query%";

慢查詢紀錄檔的常用設定引數如下:

slow_query_log=1  #是否開啟慢查詢紀錄檔,0關閉,1開啟
slow_query_log_file=/usr/local/mysql/mysql-8.0.20/data/slow-log.log  #慢查詢紀錄檔地址(5.6及以上版本)
long_query_time=1 #慢查詢紀錄檔閾值,指超過閾值時間的SQL會被記錄
log_queries_not_using_indexes  #表示未走索引的SQL也會被記錄

分析慢查詢紀錄檔一般會用專門的紀錄檔分析工具。找出慢SQL後可以通過explain關鍵字進行SQL分析,找出慢的原因。

(七)general log

general log 記錄了使用者端連線資訊以及執行的SQL語句資訊,通過MySQL的命令

show variables like '%general_log%';

可以檢視general log是否開啟以及紀錄檔的位置。

general log 可通過組態檔啟動,設定引數如下:

general_log = on
general_log_file = /usr/local/mysql/mysql-8.0.20/data/hecs-78422.log

普通查詢紀錄檔會記錄增刪改查的資訊,因此一般是關閉的。

到此這篇關於淺談MySQL中的六種紀錄檔的文章就介紹到這了,更多相關MySQL 紀錄檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com