錯誤日志
錯誤日志記錄了當(dāng) MySQL 啟動豪治、停止時蛾洛,以及服務(wù)在運(yùn)行過程中發(fā)生錯誤的相關(guān)信息剧劝,當(dāng)數(shù)據(jù)庫出現(xiàn)故障無法正常使用時可以查看該日志。
在 linux 中舰攒,錯誤日志默認(rèn)存放在/var/log/
目錄下败富,默認(rèn)的文件名為mysqld.log
∧η裕可以通過如下命令查看日志的相關(guān)參數(shù):
show variables like '%log_error%';
log_error
變量的值就是日志文件的位置兽叮。
二進(jìn)制日志
二進(jìn)制日志也就是binlog
芬骄,記錄了所有 DDL(數(shù)據(jù)定義語言)語句和 DML(數(shù)據(jù)操作語言)語句。具有如下作用:
1鹦聪、災(zāi)難時的數(shù)據(jù)恢復(fù)
2账阻、MySQL 主從復(fù)制
在 MySQL8 中默認(rèn)是開啟的,可以通過如下命令查看日志的相關(guān)參數(shù):
show variables like '%log_bin%';
log_bin
的值為ON
表示日志是開啟的泽本;log_bin_basename
表示日志文件的位置淘太,不是具體的文件名而是前綴;log_bin_index
記錄了有哪些日志文件规丽。
日志格式
MySQL 提供了如下幾種格式來記錄二進(jìn)制日志:
日志格式 | 含義 |
---|---|
STATEMENT | 記錄的是 SQL 語句蒲牧,對數(shù)據(jù)修改的 SQL 都會記錄在日志文件中 |
ROW | (默認(rèn)的)基于行的日志記錄,記錄的是每一行的數(shù)據(jù)變更前后的信息 |
MIXED | 混合了STATEMENT赌莺、ROW造成,默認(rèn)采用 STATEMENT,某些情況會自動切換為 ROW |
查看當(dāng)前日志格式:
show variables like '%binlog_format%';
修改日志格式:
binlog_format = STATEMENT
查看日志
查看二進(jìn)制日志需要使用mysqlbinlog工具雄嚣,具體的語法如下:
mysqlbinlog [options] logfilename
options 可選內(nèi)容如下:
1晒屎、-d
,指定數(shù)據(jù)庫名稱
2缓升、-o
鼓鲁,忽略日志的前 n 行命令
3、-v
港谊,將行事件(數(shù)據(jù)變更)重構(gòu)為 SQL 語句
4骇吭、-w
,將行事件(數(shù)據(jù)變更)重構(gòu)為 SQL 語句歧寺,并輸入注釋信息
如果遇到mysqlbinlog: [ERROR] unknown variable 'default-character-set=utf8mb4'
燥狰,可以添加--no-defaults
解決。
mysqlbinlog --no-defaults -d vhr -v mysql-bin.000054
刪除日志
對于繁忙的業(yè)務(wù)系統(tǒng)斜筐,每天會生成大量的 binlog龙致,長時間會占用大量磁盤空間,可以使用如下方式清理:
指令 | 含義 |
---|---|
reset master | 刪除全部日志文件顷链,刪除后日志文件編號將從xxxx.000001重新開始 |
purge master logs to 'logfilename' | 刪除指定日志文件之前的日志 |
purge master logs before 'yyyy-mm-dd hh24:mi:ss' | 刪除指定日期之前的日志 |
也可以在 MySQL 配置文件中配置二進(jìn)制文件的過期時間目代,這樣過期會自動刪除,查看默認(rèn)過期時間(30天):
show variables like 'binlog_expire_logs_seconds';
查詢?nèi)罩?/h2>
查詢?nèi)罩居涗浟丝蛻舳说乃胁僮髡Z句嗤练,默認(rèn)是關(guān)閉的榛了。可以查看相關(guān)的配置參數(shù):
show variables like '%general%';
開啟查詢?nèi)罩荆?/p>
# 0關(guān)閉煞抬,1開啟
general_log = 1
# 查詢?nèi)罩疚募?general_log_file = xxx.log
慢查詢?nèi)罩?/h2>
慢查詢?nèi)罩居涗浟怂袌?zhí)行時間超過參數(shù)long_query_time
設(shè)置的值霜大,并且掃描記錄數(shù)不少于min_examined_row_limit
的所有 SQL 語句的日志,默認(rèn)是關(guān)閉的革答。
配置慢查詢?nèi)罩荆?/p>
# 開啟
slow_query_log = 1
# 日志文件名
slow_query_log_file = slow.log
# 默認(rèn)10 秒
long_query_time = 6
# min_examined_row_limit 默認(rèn)為 0
默認(rèn)情況下战坤,不會記錄管理語句遮婶,也不會記錄不使用索引進(jìn)行查找的語句,但可以更改這個行為:
# 記錄管理語句湖笨,例如 alter table
log_slow_admin_statements = 1
# 記錄未使用索引的語句
log_queries_not_using_indexes = 1