程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> web服務器mysql日志分析

web服務器mysql日志分析

編輯: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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved