2025-05-25

 

Freebsd下如何查案和分析日志,對我來說還是一個新課題,之前沒有處理過,甚至不知道日志存放在什麼位置,如何記錄。

 

網絡上有一些不錯的資料,mysql手冊也可以用來參考,但沒有實踐過還會遇到一些莫名的問題。

 

首先來看一下mysql日志的種類,一般來說,日志有五種,分別為:

 

錯誤日志:-log-err (記錄啟動,運行,停止mysql時出現的信息)

查詢日志:-log (記錄建立的客戶端連接和執行的語句)

慢查詢日志: -log-slow-queries (記錄所有執行超過long_query_time秒的所有查詢)

更新日志:     -log-update (記錄更改數據的語句,不贊成使用該日志)

二進制日志:-log-bin (記錄所有更改數據的語句,還用於復制,恢復數據庫用)

 

 

 

我們要分析mysql運行的情況,主要的是分析慢查詢日志,簡單的幾條命令,查詢當前日志記錄的狀況:

 

mysql>show variables like 'log_%';(是否啟用瞭日志)

mysql> show master status;(怎樣知道當前的日志)

mysql> show master logs;(顯示二進制日志的數目)

 

要啟用慢查詢日志,需要在my.cnf中設置啟用:

 

long_query_time =1 執行超過1秒的sql會被log下來

log-slow-queries=  /usr/local/db/log/slowquery.log將查詢返回較慢的語句進行記錄

log-queries-not-using-indexes = /usr/local/db/log/nouseindex.log   就是字面意思,log下來沒有使用索引的query

log=/usr/local/db/log/mysql.log  對所有執行語句進行記錄

 

二進制日志文件比較大,可以再my.cnf中設置二進制日志文件的過期時間,這樣mysql就會自動刪除到期的日志文件,節省磁盤空間:

 

expire_logs_days=5

 

重新啟動mysql,就可以看到mysql開始記錄log,slow-log瞭,不知道為什麼我設置的log-queries-not-using-indexes的日志文件沒有記錄;

 

可以通過shell直接輸入mysqldumpslow /usr/local/db/log/slowquery.log 可以獲得日志的摘要信息,包括:

 

出現次數(Count),

執行最長時間(Time),

累計總耗費時間(Time),

等待鎖的時間(Lock),

發送給客戶端的行總數(Rows),

掃描的行總數(Rows),

用戶以及sql語句本身(抽象瞭一下格式, 比如limit 1, 20 用limit N,N 表示).

 

 

 

 

 

剩下的工作,就交給程序員瞭,進一步優化數據庫查詢語句,降低mysql負載。

 

日志更新

 

mysql的日志會一直記錄,如果想要斷開,重新記錄需要做以下幾步:

 

1、mv log /backup/log (如果需要備份的話)

 

2、rm log (刪除log文件,此時mysql會停止記錄日志)

 

3、mysqladmin -uroot -ppassword flush-logs (重新開始記錄)

 

 

 

 

本文出自 “三足烏工作室” 博客

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *