首頁(yè)技術(shù)文章正文

MySQL中怎樣查看錯(cuò)誤日志和二進(jìn)制日志?

更新時(shí)間:2022-10-07 來(lái)源:黑馬程序員 瀏覽量:

1.錯(cuò)誤日志

錯(cuò)誤日志是 MySQL 中最重要的日志之一,它記錄了當(dāng)mysqld啟動(dòng)和停止時(shí),以及服務(wù)器在運(yùn)行過(guò)程中發(fā)生任何嚴(yán)重錯(cuò)誤時(shí)的相關(guān)信息。當(dāng)數(shù)據(jù)庫(kù)出現(xiàn)任何故障導(dǎo)致無(wú)法正常使用時(shí),建議首先查看此日志。該日志是默認(rèn)開啟的,默認(rèn)存放目錄 /var/log/,默認(rèn)的日志文件名為 mysqld.log 。查看日志位置:

錯(cuò)誤日志的查看位置

2.二進(jìn)制日志

介紹二進(jìn)制日志(BINLOG)記錄了所有的 DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句和 DML(數(shù)據(jù)操縱語(yǔ)言)語(yǔ)句,但不包括數(shù)據(jù)查詢(SELECT、SHOW)語(yǔ)句。作用:①. 災(zāi)難時(shí)的數(shù)據(jù)恢復(fù);②. MySQL的主從復(fù)制。在MySQL8版本中,默認(rèn)二進(jìn)制日志是開啟著的,涉及到的參數(shù)如下:

 show variables like '%log_bin%';

二進(jìn)制日志

參數(shù)說(shuō)明:

log_bin_basename:當(dāng)前數(shù)據(jù)庫(kù)服務(wù)器的binlog日志的基礎(chǔ)名稱(前綴),具體的binlog文件名需要再該basename的基礎(chǔ)上加上編號(hào)(編號(hào)從000001開始)。

log_bin_index:binlog的索引文件,里面記錄了當(dāng)前服務(wù)器關(guān)聯(lián)的binlog文件有哪些。

MySQL服務(wù)器中提供了多種格式來(lái)記錄二進(jìn)制日志,具體格式及特點(diǎn)如下:

1665129140443_34.png

 show variables like '%binlog_format%';

1665129209682_圖片4.png

如果我們需要配置二進(jìn)制日志的格式,只需要在/etc/my.cnf 中配置binlog_format 參數(shù)即可。

1)查看

由于日志是以二進(jìn)制方式存儲(chǔ)的,不能直接讀取,需要通過(guò)二進(jìn)制日志查詢工具mysqlbinlog 來(lái)查看,具體語(yǔ)法:

mysqlbinlog [ 參數(shù)選項(xiàng) ] logfilename
參數(shù)選項(xiàng):
    -d 指定數(shù)據(jù)庫(kù)名稱,只列出指定的數(shù)據(jù)庫(kù)相關(guān)操作。
    -o 忽略掉日志中的前n行命令。
    -v 將行事件(數(shù)據(jù)變更)重構(gòu)為SQL語(yǔ)句
    -vv 將行事件(數(shù)據(jù)變更)重構(gòu)為SQL語(yǔ)句,并輸出注釋信息

2)刪除

對(duì)于比較繁忙的業(yè)務(wù)系統(tǒng),每天生成的binlog數(shù)據(jù)巨大,如果長(zhǎng)時(shí)間不清除,將會(huì)占用大量磁盤空間??梢酝ㄟ^(guò)以下幾種方式清理日志:

清理日志

也可以在mysql的配置文件中配置二進(jìn)制日志的過(guò)期時(shí)間,設(shè)置了之后,二進(jìn)制日志過(guò)期會(huì)自動(dòng)刪除。

 show variables like '%binlog_expire_logs_seconds%';

3)查詢?nèi)罩?/strong>

查詢?nèi)罩局杏涗浟丝蛻舳说乃胁僮髡Z(yǔ)句,而二進(jìn)制日志不包含查詢數(shù)據(jù)的SQL語(yǔ)句。默認(rèn)情況下,查詢?nèi)罩臼俏撮_啟的。 

1665129755174_圖片5.png

如果需要開啟查詢?nèi)罩?,可以修改MySQL的配置文件 /etc/my.cnf 文件,添加如下內(nèi)容:

#該選項(xiàng)用來(lái)開啟查詢?nèi)罩?nbsp;, 可選值 : 0 或者 1 ; 0 代表關(guān)閉, 1 代表開啟
general_log=1
#設(shè)置日志的文件名 , 如果沒(méi)有指定, 默認(rèn)的文件名為 host_name.log
general_log_file=mysql_query.log

開啟了查詢?nèi)罩局螅贛ySQL的數(shù)據(jù)存放目錄,也就是 /var/lib/mysql/ 目錄下就會(huì)出現(xiàn) mysql_query.log 文件。之后所有的客戶端的增刪改查操作都會(huì)記錄在該日志文件之中,長(zhǎng)時(shí)間運(yùn)行后,該日志文件將會(huì)非常大。

4)慢查詢?nèi)罩?/strong>

慢查詢?nèi)罩居涗浟怂袌?zhí)行時(shí)間超過(guò)參數(shù) long_query_time 設(shè)置值并且掃描記錄數(shù)不小于 min_examined_row_limit 的所有的SQL語(yǔ)句的日志,默認(rèn)未開啟。long_query_time 默認(rèn)為 10 秒,最小為 0, 精度可以到微秒。如果需要開啟慢查詢?nèi)罩荆枰贛ySQL的配置文件 /etc/my.cnf 中配置如下參數(shù):

 #慢查詢?nèi)罩? slow_query_log=1
 #執(zhí)行時(shí)間參數(shù)
 long_query_time=2

默認(rèn)情況下,不會(huì)記錄管理語(yǔ)句,也不會(huì)記錄不使用索引進(jìn)行查找的查詢??梢允褂胠og_slow_admin_statements和 更改此行為 log_queries_not_using_indexes,如下所述。

#記錄執(zhí)行較慢的管理語(yǔ)句
log_slow_admin_statements =1
#記錄執(zhí)行較慢的未使用索引的語(yǔ)句
log_queries_not_using_indexes = 1

注:上述所有的參數(shù)配置完成之后,都需要重新啟動(dòng)MySQL服務(wù)器才可以生效。






分享到:
和我們?cè)诰€交談!