欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談MySQL中的六種日志

 更新時(shí)間:2022年03月23日 09:43:03   作者:Java魚仔  
MySQL中存在著6種日志,本文是對MySQL日志文件的概念及基本使用介紹,不涉及底層內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

(一)概述

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)文章

最新評論