1. 程式人生 > >mysql 第三十六篇文章~mysql慢日誌方案解讀1

mysql 第三十六篇文章~mysql慢日誌方案解讀1

日誌 iges add 代碼 bytes 周期 缺省 port 同學

一 慢日誌的相關參數
long_query_time : 設定慢查詢的閥值,超出次設定值的SQL即被記錄到慢查詢日誌,缺省值為1s
log_slow_queries :1/0 指定是否開啟慢查詢日誌(該參數要被slow_query_log取代,做兼容性保留)
slow_query_log_file : 指定慢日誌文件存放位置,可以為空,系統會給一個缺省的文件

二 慢日誌的處理方案
1 將每天的慢日誌進行切割,然後用pt-query-digest 插入到遠程數據庫進行存儲
2 切割好的慢日誌保留三十天,其他的進行清空處理
3 慢日誌以郵件的形式進行每日發送
4 有特殊需求時用pt-query-digest在數據庫端進行手動過濾
三 慢日誌的切割方案
1 配合天兔的腳本,按照小時進行切割
腳本核心原理
tmp_log=`$mysql_client -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -e "select concat(‘$slowquery_dir‘,‘slowquery_‘,date_format(now(),‘%Y%m%d%H‘),‘.log‘);"|grep log|sed -n -e ‘2p‘`
set global slow_query_log=1 set global long_query_time=1 set global slow_query_log_file = ‘$tmp_log‘;
從這段代碼中我們可以看出來,是根據重新設置slow_log的方式進行切割的,然後利用pt-query-digest先讀取然後再生產新的slow_log,推薦此種方式
腳本在網上一搜就有了
2 logrotate 方式進行切割
/data/log/mysql/slowlog/mysql-slow.log {
daily 按照日期切割
rotate 30 保留30天
missingok #如果日誌文件不存在,繼續處理下一個文件而不產生報錯信息
delaycompress #推遲要壓縮的文件,直到下一輪詢周期再執行壓縮
copytruncate #見下面註解
postrotate
pt-query-digest --user=anemometer --password=anemometer --review h=node17,D=slow_query_log,t=global_query_review --history h=node17,D=slow_query_log,t=global_query_review_history --no-report --limit=0% --filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\"$HOSTNAME\"" /data/log/mysql/slowlog/mysql-slow.log-`date +%Y%m%d`
#/usr/local/mysql/bin/mysql -e "flush slow logs;"
endscript
}
在切割前進行遠程插入,感覺配置比較復雜,有熟悉此工具的同學可以采用此種方式
四 相關的一些註意事項
1 自帶
2 天兔
3 Anemometer
4 C/S架構下的自定義收集模式
1 腳本收集
共同點 pt-query-digest
不同點 過濾fliter規則和history表字段不一樣
2 對於hostname的處理
1 自帶的是無法解決這個問題,缺少相應字段
2 天兔 添加server_Id
--filter=" \$event->{add_column} = length(\$event->{arg}) and \$event->{serverid}=$lepus_server_id "
3 Anemometer 添加hostname
--filter=" \$event->{Bytes} = length(\$event->{arg}) and \$event->{hostname}=\‘$HOSTNAME\‘ "
4 pt-query-diget兩種表的區別
-history 將分析結果保存到表中,分析結果比較詳細,下次再使用--history時,如果存在相同的語句,且查詢所在的時間區間和歷史表中的不同,則會記錄到數據表中,可以通過查詢同一CHECKSUM來比較某類型查詢的歷史變化。
--review 將分析結果保存到表中,這個分析只是對查詢條件進行參數化,一個類型的查詢一條記錄,比較簡單。當下次使用--review時,如果存在相同的語句分析,就不會記錄到數據表中。
五 總結
核心工具 pt-query-digest 過濾規則,相關表設計 前端展示

mysql 第三十六篇文章~mysql慢日誌方案解讀1