淺談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ù)變化會體現(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宕機(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頁做了xx修改的信息,我們都知道數(shù)據(jù)庫的更新操作會在內(nèi)存中先執(zhí)行,最后刷入磁盤。
redo log就是為了恢復(fù)更新了內(nèi)存但是由于宕機(jī)等原因沒有刷入磁盤中的那部分?jǐn)?shù)據(jù)。
(三)undo log
undo log主要用來回滾到某一個(gè)版本,是一種邏輯日志。undo log記錄的是修改之前的數(shù)據(jù),比如:當(dāng)delete一條記錄時(shí),undolog中會記錄一條對應(yīng)的insert記錄,從而保證能恢復(fù)到數(shù)據(jù)修改之前。在執(zhí)行事務(wù)回滾的時(shí)候,就可以通過undo log中的記錄內(nèi)容并以此進(jìn)行回滾。
undo log還可以提供多版本并發(fā)控制下的讀取(MVCC)。
(四)bin log
MySQL的bin log日志是用來記錄MySQL中增刪改時(shí)的記錄日志。簡單來講,就是當(dāng)你的一條sql操作對數(shù)據(jù)庫中的內(nèi)容進(jìn)行了更新,就會增加一條bin log日志。查詢操作不會記錄到bin log中。bin log最大的用處就是進(jìn)行主從復(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指定日志文件的名稱,默認(rèn)會放到數(shù)據(jù)庫目錄下,可通過以下命令查看
show VARIABLES like '%datadir%'
(五)error log
error log主要記錄MySQL在啟動、關(guān)閉或者運(yùn)行過程中的錯(cuò)誤信息,在MySQL的配置文件my.cnf中,可以通過log-error=/var/log/mysqld.log 執(zhí)行mysql錯(cuò)誤日志的位置。
通過MySQL的命令
show variables like "%log_error%";
也可以獲取到錯(cuò)誤日志的位置。
(六)slow query log
慢查詢?nèi)罩居脕碛涗泩?zhí)行時(shí)間超過指定閾值的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)罩鹃撝?,指超過閾值時(shí)間的SQL會被記錄 log_queries_not_using_indexes #表示未走索引的SQL也會被記錄
分析慢查詢?nèi)罩疽话銜脤iT的日志分析工具。找出慢SQL后可以通過explain關(guān)鍵字進(jì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 5.7.21 解壓版通過歷史data目錄恢復(fù)數(shù)據(jù)的教程圖解
本文通過圖文并茂的形式給大家介紹了mysql 5.7.21 解壓版,通過歷史data目錄恢復(fù)數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09Mysql用戶創(chuàng)建以及權(quán)限賦予操作的實(shí)現(xiàn)
在MySQL中,創(chuàng)建新用戶并為其授予權(quán)限是一項(xiàng)常見的操作,本文主要介紹了Mysql用戶創(chuàng)建以及權(quán)限賦予操作的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10ubuntu server配置mysql并實(shí)現(xiàn)遠(yuǎn)程連接的操作方法
下面小編就為大家分享一篇ubuntu server配置mysql并實(shí)現(xiàn)遠(yuǎn)程連接的操作方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2017-12-12Mysql中自定義函數(shù)的創(chuàng)建和執(zhí)行方式
這篇文章主要介紹了Mysql中自定義函數(shù)的創(chuàng)建和執(zhí)行方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03mysql中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