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

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

