一、錯(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 您觉。查看日志位置:
show variables like '%log_error%';
二、二進(jìn)制日志
1.介紹
二進(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%';
參數(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文件有哪些顾彰。
2.格式
MySQL服務(wù)器中提供了多種格式來(lái)記錄二進(jìn)制日志,具體格式及特點(diǎn)如下:
- STATEMENT: 基于SQL語(yǔ)句的日志記錄胃碾,記錄的是SQL語(yǔ)句涨享,對(duì)數(shù)據(jù)進(jìn)行修改的SQL都會(huì)記錄在日志文件中。
- ROW: 基于行的日志記錄仆百,記錄的是每一行的數(shù)據(jù)變更厕隧。(默認(rèn))
- MIXED: 混合了STATEMENT和ROW兩種格式,默認(rèn)采用STATEMENT俄周,在某些特殊情況下會(huì)自動(dòng)切換為ROW進(jìn)行記錄吁讨。
配置二進(jìn)制日志的格式,只需要在 /etc/my.cnf 中配置binlog_format 參數(shù)即可峦朗。
show variables like '%binlog_format%';
3.查看
由于日志是以二進(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ǔ)句拴曲,并輸出注釋信息
4.刪除
對(duì)于比較繁忙的業(yè)務(wù)系統(tǒng),每天生成的binlog數(shù)據(jù)巨大凛忿,如果長(zhǎng)時(shí)間不清除澈灼,將會(huì)占用大量磁盤空間≈斗牵可以通過(guò)以下幾種方式清理日志:
-
reset master
: 刪除全部 binlog 日志蕉汪,刪除之后,日志編號(hào)逞怨,將從 binlog.000001重新開始 -
purge master logs to 'binlog.*'
: 刪除 * 編號(hào)之前的所有日志 -
purge master logs before 'yyyy-mm-dd hh24:mi:ss'
: 刪除日志為 "yyyy-mm-dd hh24:mi:ss" 之前產(chǎn)生的所有日志
也可以在mysql的配置文件中配置二進(jìn)制日志的過(guò)期時(shí)間者疤,設(shè)置了之后,二進(jìn)制日志過(guò)期會(huì)自動(dòng)刪除叠赦。
show variables like '%binlog_expire_logs_seconds%';
三驹马、查詢?nèi)罩?/h2>
查詢?nèi)罩局杏涗浟丝蛻舳说乃胁僮髡Z(yǔ)句,而二進(jìn)制日志不包含查詢數(shù)據(jù)的SQL語(yǔ)句除秀。默認(rèn)情況下糯累,查詢?nèi)罩臼俏撮_啟的。
開啟查詢?nèi)罩静岵龋梢孕薷腗ySQL的配置文件 /etc/my.cnf 文件泳姐,添加如下內(nèi)容:
#該選項(xiàng)用來(lái)開啟查詢?nèi)罩?, 可選值 : 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ì)非常大嫉父。
四沛硅、慢查詢?nèi)罩?/h2>
慢查詢?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)行查找的查詢吩抓。可以使用log_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ù)器才可以生效。