背景介紹:
很多情況下,都需要對MySQL日志進行各種分析,來了解系統運行的方方面面。MySQL官方自帶了一些工具對日志進行分析,比如mysqlbinlog可以用來分析二進制日志,mysqlslow可以用來分析慢查詢日志,但這些工具相對功能較為單一,而且對查詢日志沒有提供分析工具。因此,很多第三方工具應用而生,而mysqlsla(MySQL Statement Log Analyzer)是其中使用較為廣泛的一個。
目前常見mysql慢查詢分析工具大概歸納為:
工具 / 命令 | 一般統計信息 | 高級統計信息 | 腳本 | 優勢 |
mysqldumpslow | 支持 | 不支持 | perl | mysql官方自帶 |
mysqlsla | 支持 | 支持 | perl | 功能強大,數據報表齊全,定制化能力強 |
mysql-explain-slow-log | 支持 | 不支持 | perl | 無 |
mysql-log-filter | 支持 | 部分支持 | python / php | 不失功能的前提下,保持輸出簡潔 |
myprofi | 支持 | 不支持 | php | 非常精簡 |
還有pt-query-digest(需要安裝Percona Toolkit)等其他工具,這里只記錄一下mysqlsla常見使用方法。
測試環境:
centos7 / mysql 5.6(開啟慢查詢功能)
安裝操作:
下載:https://github.com/daniel-nichter/hackmysql.com
1. 安裝依賴
[root@server-10 ~]# yum install perl perl-DBI perl-DBD-MySQL perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
2. 切換到mysqlsla目錄進行編譯安裝
[root@server-10 mysqlsla]# perl Makefile.PL Checking if your kit is complete... Looks good Writing Makefile for mysqlsla [root@server-10 mysqlsla]# make cp lib/mysqlsla.pm blib/lib/mysqlsla.pm cp bin/mysqlsla blib/script/mysqlsla /usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/mysqlsla Manifying blib/man3/mysqlsla.3pm [root@server-10 mysqlsla]# make install Installing /usr/local/share/perl5/mysqlsla.pm Installing /usr/local/share/man/man3/mysqlsla.3pm Installing /usr/local/bin/mysqlsla //生成了mysqlsla命令 Appending installation info to /usr/lib64/perl5/perllocal.pod
3. 使用mysqlsla命令
[root@server-10 ~]# mysqlsla -lt slow --sort t_sum --top 20 mysql-slow.log > /tmp/select.log
// 查詢記錄最多的20個sql語句,並寫到select.log中去。
[root@server-10 ~]# mysqlsla -lt slow -sf "+select" -top 100 mysql-slow.log >/tmp/sql_select.log
// 統計慢查詢文件為mysql-slow.log中的所有select的慢查詢sql,並顯示執行時間最長的100條sql,並寫到sql_select.log中去
root@server-10 ~]# mysqlsla -lt slow -sf "+select,update" -top 100 -sort c_sum -db mydata mysql-slow.log >/tmp/sql_num.log
// 統計慢查詢文件為mysql-slow.log的數據庫為mydata的所有select和update的慢查詢sql,並查詢次數最多的100條sql,並寫到sql_num.sql中去
參數說明:
"--log-type (-lt) TYPE LOGS" // 指定日志類型
Parse MySQL LOGS of TYPE. Default none. TYPE must be either slow, general, binary, msl or udl. LOGS is a space-separated list of MySQL log files.
"--statement-filter (-sf) CONDTIONS" // 語句過濾,“+”和“-”分別表示“僅顯示”和“僅去掉”
Set SQL statement filter using CONDITIONS. Default none. CONDITIONS is a comma-separated list of SQL statement types in the form:
[+-][TYPE],[TYPE],etc.
"--top N" // 最top的N條,默認顯示top 10
After sorting display only the top N queries. Default 10.
"--sort META" // 按指定排序,默認慢查詢和微秒查詢會按照總執行時間“t_sum”來排序,其他日志默認按照“c_sum”
Sort queries according to META. Default t_sum for slow and msl logs, c_sum for all others. META is any meta-property name.
"--databases (-db) (-D) DATABASES" // 指定數據庫
Try EXPLAINing queries which have no known database using DATABASES. Default none. DATABASES is a comma-separated list of database names (without
spaces). Only used when option explain is used too.
其他參數可通過man mysqlsla查詢。
結束.
其他參考:
https://www.jb51.net/article/27191.htm
https://yq.aliyun.com/articles/59260