天天看點

web伺服器mysql日志分析

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 (重新開始記錄)

日志分析工具

  1. mysqlsla -lt slow /usr/local/db/log/slowquery.log > /usr/1.log