淺談MySQL中的六種日志
(一)概述
MySQL中存在著以下幾種日志:重寫日志(redo log)、回滾日志(undo log)、二進制日志(bin log)、錯誤日志(error log)、慢查詢?nèi)罩荆╯low query log)、一般查詢?nèi)罩荆╣eneral log)。
MySQL中的數(shù)據(jù)變化會體現(xiàn)在上面這些日志中,比如事務(wù)操作會體現(xiàn)在redo log、undo log以及bin log中,數(shù)據(jù)的增刪改查會體現(xiàn)在 binlog 中。本章是對MySQL日志文件的概念及基本使用介紹,不涉及底層內(nèi)容。針對開發(fā)人員而言,這幾種日志中最有可能使用到的是慢查詢?nèi)罩尽?/p>
(二)redo log
redo log是一種基于磁盤的數(shù)據(jù)結(jié)構(gòu),用來在MySQL宕機情況下將不完整的事務(wù)執(zhí)行數(shù)據(jù)糾正,redo日志記錄事務(wù)執(zhí)行后的狀態(tài)。
當(dāng)事務(wù)開始后,redo log就開始產(chǎn)生,并且隨著事務(wù)的執(zhí)行不斷寫入redo log file中。redo log file中記錄了xxx頁做了xx修改的信息,我們都知道數(shù)據(jù)庫的更新操作會在內(nèi)存中先執(zhí)行,最后刷入磁盤。
redo log就是為了恢復(fù)更新了內(nèi)存但是由于宕機等原因沒有刷入磁盤中的那部分數(shù)據(jù)。
(三)undo log
undo log主要用來回滾到某一個版本,是一種邏輯日志。undo log記錄的是修改之前的數(shù)據(jù),比如:當(dāng)delete一條記錄時,undolog中會記錄一條對應(yīng)的insert記錄,從而保證能恢復(fù)到數(shù)據(jù)修改之前。在執(zhí)行事務(wù)回滾的時候,就可以通過undo log中的記錄內(nèi)容并以此進行回滾。
undo log還可以提供多版本并發(fā)控制下的讀?。?strong>MVCC)。
(四)bin log
MySQL的bin log日志是用來記錄MySQL中增刪改時的記錄日志。簡單來講,就是當(dāng)你的一條sql操作對數(shù)據(jù)庫中的內(nèi)容進行了更新,就會增加一條bin log日志。查詢操作不會記錄到bin log中。bin log最大的用處就是進行主從復(fù)制,以及數(shù)據(jù)庫的恢復(fù)。
通過下面的命令可以查看是否開啟binlog日志
show VARIABLES like '%log_bin%'
開啟binlog的方式如下:
log-bin=mysql-bin server-id=1 binlog_format=ROW
其中l(wèi)og-bin指定日志文件的名稱,默認會放到數(shù)據(jù)庫目錄下,可通過以下命令查看
show VARIABLES like '%datadir%'
(五)error log
error log主要記錄MySQL在啟動、關(guān)閉或者運行過程中的錯誤信息,在MySQL的配置文件my.cnf中,可以通過log-error=/var/log/mysqld.log 執(zhí)行mysql錯誤日志的位置。
通過MySQL的命令
show variables like "%log_error%";
也可以獲取到錯誤日志的位置。
(六)slow query log
慢查詢?nèi)罩居脕碛涗泩?zhí)行時間超過指定閾值的SQL語句,慢查詢?nèi)罩就糜趦?yōu)化生產(chǎn)環(huán)境的SQL語句??梢酝ㄟ^以下語句查看慢查詢?nèi)罩臼欠耖_啟以及日志的位置:
show variables like "%slow_query%";
慢查詢?nèi)罩镜某S门渲脜?shù)如下:
slow_query_log=1 #是否開啟慢查詢?nèi)罩荆?關(guān)閉,1開啟 slow_query_log_file=/usr/local/mysql/mysql-8.0.20/data/slow-log.log #慢查詢?nèi)罩镜刂罚?.6及以上版本) long_query_time=1 #慢查詢?nèi)罩鹃撝担赋^閾值時間的SQL會被記錄 log_queries_not_using_indexes #表示未走索引的SQL也會被記錄
分析慢查詢?nèi)罩疽话銜脤iT的日志分析工具。找出慢SQL后可以通過explain關(guān)鍵字進行SQL分析,找出慢的原因。
(七)general log
general log 記錄了客戶端連接信息以及執(zhí)行的SQL語句信息,通過MySQL的命令
show variables like '%general_log%';
可以查看general log是否開啟以及日志的位置。

general log 可通過配置文件啟動,配置參數(shù)如下:
general_log = on general_log_file = /usr/local/mysql/mysql-8.0.20/data/hecs-78422.log
普通查詢?nèi)罩緯涗浽鰟h改查的信息,因此一般是關(guān)閉的。
到此這篇關(guān)于淺談MySQL中的六種日志的文章就介紹到這了,更多相關(guān)MySQL 日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)庫服務(wù)器端核心參數(shù)詳解和推薦配置
MySQL手冊上也有服務(wù)器端參數(shù)的解釋,以及參數(shù)值的相關(guān)說明信息,現(xiàn)針對我們大家重點需要注意、需要修改或影響性能 的服務(wù)器端參數(shù),作其用處的解釋和如何配置參數(shù)值的推薦,此事情拖了不少時間,為方便大家?guī)兔m錯2011-12-12
Workbench通過遠程訪問mysql數(shù)據(jù)庫的方法詳解
這篇文章主要給大家介紹了Workbench通過遠程訪問mysql數(shù)據(jù)庫的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06
Mysql 的存儲引擎,myisam和innodb的區(qū)別
這篇文章主要介紹了Mysql 的存儲引擎,myisam和innodb的區(qū)別,需要的朋友可以參考下2014-12-12
mysql中You can’t specify target table for update in FROM clau
這篇文章主要介紹了mysql中You can’t specify target table for update in FROM clause錯誤解決方法,需要的朋友可以參考下2015-02-02
MySQL雙層游標(biāo)嵌套循環(huán)實現(xiàn)方法
要實現(xiàn)逐行獲取數(shù)據(jù),需要用到MySQL中的游標(biāo),一個游標(biāo)相當(dāng)于一個for循環(huán),這里需要用到2個游標(biāo),如何在MySQL中實現(xiàn)游標(biāo)雙層循環(huán)呢,下面小編給大家分享MySQL雙層游標(biāo)嵌套循環(huán)方法,感興趣的朋友跟隨小編一起看看吧2024-05-05
MYSQL建立外鍵失敗幾種情況記錄Can''t create table不能創(chuàng)建表
當(dāng)你試圖在mysql中創(chuàng)建一個外鍵的時候,這個出錯會經(jīng)常發(fā)生,這是非常令人沮喪的。2011-08-08

