mysql日志學習總結,mysql日志總結
一,日志簡介
mysql日志主要分為四類,使用這些日志文件,可以查看mysql內部發生的事情。這四類日志分別為:
記錄mysql服務的啟動、運行或停止mysql的服務時出現的問題。
記錄建立的客戶端連接和執行語句。
記錄所有更改數據的語句,可以用於數據復制。
記錄所有執行時間超過long_query_time的所有查詢或不適用索引的查詢。
二,二進制文件
在my.cnf中[mysqld]有幾個二進制的設置:
log-bin [=path/ [filename] ]
expire_logs_days = 10
max_binlog_size = 100M
log-bin定義二進制日志,path表明二進制文件所在路徑;filename指定文件名稱;其中.index為其他二進制日志清單。
expire_binlog_size定義清除過期日志的時間。默認值是零,表示沒有自動清除。
max_binlog_size定義單個文件的大小 ,當超出文件大小限制,日志就會發生滾動,關閉當前的文件,重新打開一個新的日志文件,不能將該變量設置為大於1G或小於4kb。
可以使用show variables like ‘log_%’;日志的設置。
建議:數據庫文件最好不要和日志文件放在同一個磁盤上。
語句:show binary bogs;
查看二進制日志文件個數及文件名。
使用命令mysqlbinlog查看日志格式,
刪除二進制日志
語句:reset master ;刪除二進制文件。
刪除指定二進制文件:
purge (master | binary ) logs to ‘log_name’
purge (master | binary ) logs before 'date'
mysqlbinlog恢復數據的語法如下:
mysqlbinlog [option] filename mysql -u user p password
option是一些可選項,filename是日志文件名。比較常用的兩對option參數是--start-date、--stop-date和--start-position、--stop-position。
--start-date、--stop-date可以設置恢復數據庫的起始時間點和結束時間點。--start-position、--stop-position可以指定恢復數據庫的開始位置和結束位置。
可以在配置文件裡修改,但是在配置文件裡修改需要重啟數據庫。所以使用命令修改,
set sql_log_bin = [ 0 | 1 ] 零為暫停;1位恢復。
三,錯誤日志
記錄mysql服務的啟動、運行或停止mysql的服務時出現嚴重錯誤的相關信息。
在配置文件中,配置如下:
log-error [=path/ [filename] ] path為日志文件所在的目錄路徑,file_name為日志名。修改配置項後,需要重啟mysql服務以生效。
查看錯誤日志可以監控系統的運行狀態,便於及時發現故障、修復故障。
查看錯誤日志路徑:
show variables like 'log_err';
找到日志文件所在,可以用常用的linux命令查看。
mysql的錯誤日志是以文本文件的形式在文件系統中存儲的,可以直接刪除。
flush logs只會重新打開日志文件,不會備份和創建的操作。如果日志文件不存在使用flush logs 可以自動創建。
刪除錯誤日志之後,需要在服務器端執行以下命令:
mysqladmin -u root -p flush-logs
四,通用查詢日志
通用查詢日志記錄包括mysql的所有用戶操作,啟動和關閉服務、執行查詢和更新語句等。
log [=path/ [filename] ] path為日志文件所在的目錄路徑,file_name為日志名。修改配置項後,需要重啟mysql服務以生效
windows下,使用記事本就可以打開;linux下使用more,less,cat等命令查看。
通用查詢日志為文本文件格式,所以可以直接刪除。重新建立新的日志文件,可以使用mysqladmin flush-log
五,慢查詢日志
記錄所有執行時間超過long_query_time的所有查詢或不適用索引的查詢;通過慢查詢日志,可以找出執行時間較長、執行效率較低的語句,
然後進行優化。
啟動和設置慢查詢日志
在my.cnf的配置文件如下:
[mysqld]
log-slow-queries [=path/ [filename] ]
long_query_time=n
path為日志文件所在的目錄路徑,filename為日志名,n為時間,單位為秒。修改配置項後,需要重啟mysql服務以生效
可以使用慢查詢日志分析工具查看;比較著名的有:mysql dump slow、mysql sla 、mysql log filter
可以直接刪除。