MySQL效能監控工具mysqlreport安裝和中文說明


管理 mysql 最讓人困擾的就是如何有效的掌握 MySQL 的健康狀況,因為 MySQL 雖然有提供許多系統變量值供您參考,但這些零散的數據若要手動搜集與過濾將會是一件十分沒有效率的事情(除非您寫 Scripts 去分析)。而接下來要介紹的這套 “工具” 其實是由 hackmysql.com 的站長所撰寫的 perl Scritps,旨在協助 MySQL DBA 搜集與分析 MySQL 的運作狀況。

官方網站: http://hackmysql.com/
軟件下載: http://hackmysql.com/mysqlreport

mysqlreport以很友好的方式顯示 MySQL狀態變。事實上,它幾乎報告了所有的狀態。不像 SHOW STATUS 只是在顯示了100多個狀態值,mysqlreport 則以人性化的方式闡釋和格式化了這些狀態值,大大增加了其可讀性。

mysqlreport 的好處是可以快速的查看各種狀態參數組,從而了解服務器的運行狀態情況,而無需從 SHOW STATUS 的結果中人工計算。例如索引讀取比率是個重要的參數,但是 SHOW STATUS 中並沒有顯示;它是一個推斷值(key_reads 和 key_read_requests 的比值)。

mysql命令行中精彩使用下面的指令來獲取當前數據庫的實時狀態:

mysql>show status;
mysql>show innodb status;

但是他們的顯示結果不太友好,我們需要更好的更加人性化的分析結果,而不是堆出來一堆數字。mysqlreport是一個第三方的Mysql狀態報告工具,它把mysql的show status 和 show innodb status的結果進行一系列的后期處理,讓可讀性更強,更友好。 下面是mysqlreport的安裝過程:

MySQLReport 是用perl語言編寫,所以想要運行它首先需要安裝perl環境;它還要與MySQL數據庫連接,所以還需要安裝數據庫接口 DBI 和 數據庫驅動 DBD-MySQL 。

# perl -v    //如果顯示perl版本說明perl環境已經安裝

安裝DBI

1 yum -y install perl-DBI

或者

1 # wget http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz
2 # tar zxvf DBI-1.616.tar.gz
3 # cd DBI-1.616
4 # perl Makefile.PL
5 # make
6 # make test
7 # make
8 # make install

安裝DBD-mysql

1   yum -y install perl-DBD-MySQL

或者

1 # wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.020.tar.gz
2 # tar zxvf DBD-mysql-4.020.tar.gz
3 # cd DBD-mysql-4.020
4 # perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
5 # make
6 # make test

如果報錯:

PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/Arch')" t/*.t t/00base....................ok 1/6
# Failed test 'use DBD::mysql;' t/00base....................NOK 2
# in t/00base.t at line 21.
# Tried to use 'DBD::mysql'.
# Error: Can't load '/usr/local/src/DBD-mysql-4.020/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.16: cannot open shared object file: No such file or directory at /usr/lib64/perl5/5.8.8/x86_64-Linux-thread-multi/DynaLoader.pm line 230.
# at (eval 6) line 2 # Compilation failed in require at (eval 6) line 2.
# BEGIN failed--compilation aborted at t/00base.t line 21.
FAILED--Further testing stopped: Unable to load DBD::mysql make: *** [test_dynamic] Error 9 

 解決辦法:

1 # cp /usr/local/mysql/lib/mysql/* /usr/lib
2 # cp /usr/local/mysql/lib/mysql/* /usr/lib64/ (如果64位 否則是lib)
3 
4 # make
5 # make install

安裝mysqlreport

1 http://pkgs.fedoraproject.org/repo/pkgs/mysqlreport/mysqlreport-3.5.tgz/33a345f5e2c89b083a9ff0423f7fd7b4/mysqlreport-3.5.tgz

參數的說明:

 1  mysqlreport --help
 2 
 3 mysqlreport v3.5 Apr 16 2008 
 4 mysqlreport makes an easy-to-read report of important MySQL status values.
 5 
 6 Command line options (abbreviations work): 
 7 --user USER       Connect to MySQL as USER 
 8 --password PASS   Use PASS or prompt for MySQL user's password 
 9 --host ADDRESS    Connect to MySQL at ADDRESS 
10 --port PORT       Connect to MySQL at PORT 
11 --socket SOCKET   Connect to MySQL at SOCKET 
12 --no-mycnf        Don't read ~/.my.cnf 
13 --infile FILE     Read status values from FILE instead of MySQL 
14 --outfile FILE    write report to FILE 
15 --email ADDRESS   Email report to ADDRESS (doesn't work on Windows) 
16 --flush-status    Issue FLUSH STATUS; after getting current values 
17 --relative X      Generate relative reports. If X is an integer, 
18 reports are live from the MySQL server X seconds apart. 
19 If X is a list of infiles (file1 file2 etc.), 
20 reports are generated from the infiles in the order 
21 that they are given. 
22 --report-count N  Collect N number of live relative reports (default 1) 
23 --detach          Fork and detach from terminal (run in background) 
24 --help            Prints this 
25 --debug           Print debugging information

以下是mysqlreport的命令選項:

 1 命令行選項的格式是 --選項,不過 -選項 的格式也可以。所有的選項都有其縮寫,只要是唯一的。例如,選項 --host 可以縮寫成 --ho,不過不能寫成 --h,因為 --h 有歧義,可能是 --host 或者 --help。
 2 
 3 選項列表
 4 
 5 --user USER
 6 --password
 7 --host ADDRESS
 8 --port PORT
 9 --socket SOCKET
10 --no-mycnf
11 
12 --help 這些選項是模擬其他標准應用程序的。從 2.3 版本開始,--password 可以在后面加上參數,如 "--password FOO"。如果命令行中只指定了選項
13 
14 --password 則會提示輸入密碼。--no-mycnf 告訴 mysqlreport 不要讀取 ~/.my.cnf,默認會去讀取這個文件。--user 和 --password 總是覆蓋從 ~/.my.cnf 中取得的結果。 
15 
16 --infile FILE 直接從文件中讀取狀態文件,而不是從MySQL的 SHOW STATUS 中讀取。文件內容通常是從 SHOW STATUS 的結果中取得,並且包含格式化字符(|, +, -)。mysqlreport 認為這樣的文件"狀態名 數值"格式的,狀態包含字符和下划線(A-Z 和 _),數值則是非負整數。在狀態名和數值之間的任何內容都會被忽略。mysqlreport 也需要以下MySQL服務器系統變量:version, table_cache, max_connections, key_buffer_size, query_cache_size, thread_cache_size。
17 
18 INFILE 的格式也可以是 "名字 = 數值"這樣的,名字可以使是上面提到的各種變量名,數值是非負整數,可能后面帶有M或者其他單位(根據版本不同而定)。例如,想要指定 18M 的 key_buffer_size:key_buffer_size = 18M。或者,256 個 table_cache:table_cache = 256。M 指兆字節,而非百萬。因此 18M 是 18,874,368,而非 18,000,000。如果這些服務器變量沒有指定,則使用默認以下默認值:0.0.0, 64, 100, 8M, 0, 0,就可能會讓報告結果看起來很奇怪。
19 
20 注意:MySQL 服務器版本在 5.1.3 或更新時,盡管系統變量 table_cache 改成了 table_open_cache,但是讀取本地文件時仍采用 table_cache。
21 
22 --outfile FILE 在屏幕顯示完報告結果后,將結果寫入文件中。mysqlreport 的內部機制總是先將結果寫入臨時文件中。然后將該臨時文件里的內容打印到屏幕上。然后,如果指定了 --outfile 選項,則將臨時文件拷貝成 OUTFILE。如果指定選項 --email,則會刪除臨時文件。 
23 
24 --email ADDRESS 在屏幕顯示完結果后,將結果發送到郵件地址 ADDRESS 中去。欲該選項,需要在 /usr/sbin/ 目錄下有 sendmail 程序,因此無法在 windows 平台下使用。/usr/sbin/sendmail 可以符號鏈接到 qmail,或者任何其他能模擬 sendmail -t 方式的 MTA 程序。郵件來源是:mysqlreport,主題是:MySQL status report on HOST,HOST 是 mysqlreport所在的主機名,可能是讀取到的 --host 值,默認是 localhost。
25 
26 --flush-status 顯示完報告后,執行 "FLUSH STATUS;" 語句。如果沒有權限,則 DBD::mysql 會顯示返回值。 
27 
28 --relative (-r) X mysqlreport 通常情況下報告的是自從 MySQL 服務器啟動以來的狀態信息。--relative 選項則是令 mysqlreport 產生一份自從上次報告以來的相關報告。
29 
30 如果 --relative X 的 X 值是一個整數,則 mysqlreport 會在隔 X 秒后再次產生一份 MySQL 服務器的狀態報告。產生報告的次數是由 --report-count 選項來控制的。默認是產生 1 份相關的報告。例如,指定 --relative 的值為 60,則會產生 2 份報告:第一份會馬上生成,第二份會在 60 秒后再次生成。第二份報告中的數值會和前面的那份相關。例如,前面那份中總共有 10.00k 次查詢,在這 60 秒的間隔時間里接受了新的 1.00k 次查詢,則第二份的報告中的總查詢次數是 1.00k 而非 11.00k 次。
31 
32 如果 --relative 選項的值也可以是本地文件(類似 --infile 選項的用法),那么 mysqlreport 會按照參數值中文件的順序來依次產生狀態報告。因此,根據這些文件產生的時間來指定選項的值非常重要:較早產生的文件放在參數的前面。第一個文件中必須有手工添加的系統變量,例如:key_buffer_size、table_cache 等。每個文件中可以有多組 "SHOW STATUS" 的結果。注意:通過 "mysqladmin -r -i N extended" 產生的狀態文件無法使用,因為 mysqladmin 的 -r 參數已經令其產生了具有相對性的狀態值了。
33 
34 由於 mysqlreport 首先會把狀態報告寫到臨時文件中,如果 --relative 的值是 整數(而非 本地文件)時,mysqlreport 會顯示它把文件寫到哪了。那么就可以直接通過查看這些文件內容來觀察服務器的狀況了。
35 
36 --report-count (-c) N 生成 N 份相關的報告。本選項只有在同時啟用 --relative 選項后才有效。mysqlreport 會自動產生 N+1 份報告:第一份基本報告,以及后面的 N 份相關報告。
37 
38 --detach  若指定本選項,則 mysqlreport 會派生出進程來,不只是在屏幕顯示結果,還會轉入后台繼續運行。派生新進程后,mysqlreport 會報告它把結果寫入哪個臨時文件了。本選項還可以指定 --outfile 或 --email 的一個。如果沒有指定 --outfile 或 --email 的值,則產生的臨時文件會被刪除,因為 mysqlreport 派生出新進程后,無法再將結果打印到終端屏幕上了。本選項如果和 --relative 一起使用的話就更有意義了,這樣 mysqlreport 就能定時報告信息,而無需人工登錄等方式在中斷執行了。使用如下的命令,就能讓 mysqlrepot 隔一個小時再次產生一次報告,並將結果發送到自己的信箱中去:
39 
40 # mysqlreport -r 3600 -detach -email host@domain.com
41 
42 一個小時候后,mysqlreport 通過email發送報告,刪除臨時文件,並且干凈地終止。
43 
44 --debug  顯示調試信息。
45 
46 --dtq (Questions 報告的 Total 部分中) 顯示所有的查詢分布報告。這些查詢主要包括以下四部分:DMS (見下面)、COM_ (見下面)、COM_QUIT(見 COM_QUIT and Questions)、以及其他未知。每部分根據其總數倒序顯示。
47 
48 --dms (Questions 報告的 DMS 部分中) 顯示所有的數據維護語句(DMS)報告。DMS是下面文檔 13.2. Data Manipulation Statements 中提到的那些(當前主要有:SELECT, INSERT, REPLACE, UPDATE, and DELETE)。每個 DMS 根據其總數倒序顯示。
49 
50 --com N (Questions 報告之后) 以降序顯示最多 N 個 非DMS Com_ 狀態值。如果沒有指定 N 的值,則默認是 3。所謂的非DMS Com_ 狀態值,包括:Com_change_db、Com_show_tables、Com_rollback 等。
51 
52 --sas (Questions 報告之后) 顯示所有的 Select_ 和 Sort_ 報告。詳情請看 MySQL Select and sort Status Variables。
53 
54 --qcache 如果打開查詢緩存的話,則顯示查詢緩存狀態報告
55 
56 --tab (Create Temp 報告之后) 顯示 線程、放棄的、流量 等狀態報告。從 mysqlreport v2.3 開始,線程狀態是從 Threads_ 狀態值讀取。
57 
58 --innodb 顯示 InnoDB 狀態報告,包括MySQL 5.0.2以后才支持的InnoDB 緩沖池,以及5.0.3以后才支持的InnoDB鎖狀態報告。
59 
60 --innodb-only 只顯示 InnoDB 報告;不顯示其他報告。
61 
62 --dpr 顯示 InnoDB 數據,頁,行報告。
63 
64 --all 如果可能,則顯示所有的狀態報告。一些報告,比如查詢緩存、InnoDB等需要特定版本的MySQL或者其他特性才能支持。例如,盡管服務器支持查詢緩存,但是它被禁用了,則不管是否指定了 --qcache 或者 --all,都不會顯示查詢緩存的報告。

 最終產生的結果:

  1 [root@localhost mysqlreport-3.5]# ./mysqlreport --user root --password sina.com --socket /tmp/mysqld.sock 
  2 Use of uninitialized value $is in multiplication (*) at ./mysqlreport line 829.
  3 Use of uninitialized value in formline at ./mysqlreport line 1227.
  4 Use of uninitialized value in formline at ./mysqlreport line 1235.
  5 MySQL 5.5.41-log         uptime 6 22:50:53      Fri Jul 24 10:29:33 2015
  6 
  7 __ Key _________________________________________________________________
  8 Buffer used         0 of 512.00M  %Used:   0.00
  9   Current      93.36M            %Usage:  18.24
 10 Write hit       0.00%
 11 Read hit        0.00%
 12 
 13 __ Questions ___________________________________________________________
 14 Total         421.97M   702.5/s
 15   QC Hits     302.51M   503.6/s  %Total:  71.69
 16   Com_         71.56M   119.1/s           16.96
 17   DMS          47.48M    79.1/s           11.25
 18   COM_QUIT    411.49k     0.7/s            0.10
 19   +Unknown      8.83k     0.0/s            0.00
 20 Slow 1 s        1.12k     0.0/s            0.00  %DMS:   0.00  Log: OFF
 21 DMS            47.48M    79.1/s           11.25
 22   SELECT       46.66M    77.7/s           11.06         98.27
 23   INSERT      817.56k     1.4/s            0.19          1.72
 24   DELETE        1.37k     0.0/s            0.00          0.00
 25   UPDATE          926     0.0/s            0.00          0.00
 26   REPLACE           0       0/s            0.00          0.00
 27 Com_           71.56M   119.1/s           16.96
 28   change_db    69.87M   116.3/s           16.56
 29   set_option    1.29M     2.2/s            0.31
 30   commit      373.13k     0.6/s            0.09
 31 
 32 __ SELECT and Sort _____________________________________________________
 33 Scan           23.90k     0.0/s %SELECT:   0.05
 34 Range           1.17k     0.0/s            0.00
 35 Full join           0       0/s            0.00
 36 Range check         0       0/s            0.00
 37 Full rng join       0       0/s            0.00
 38 Sort scan          28     0.0/s
 39 Sort range          0       0/s
 40 Sort mrg pass       0       0/s
 41 
 42 __ Query Cache _________________________________________________________
 43 Memory usage  352.62M of 512.00M  %Used:  68.87
 44 Block Fragmnt   0.00%
 45 Hits          302.51M   503.6/s
 46 Inserts        46.65M    77.7/s
 47 Insrt:Prune  46.65M:1    77.7/s
 48 Hit:Insert     6.48:1
 49 
 50 __ Table Locks _________________________________________________________
 51 Waited              0       0/s  %Total:   0.00
 52 Immediate      47.48M    79.1/s
 53 
 54 __ Tables ______________________________________________________________
 55 Open               53 of   64    %Cache:  82.81
 56 Opened             99     0.0/s
 57 
 58 __ Connections _________________________________________________________
 59 Max used           13 of  151      %Max:   8.61
 60 Total         411.50k     0.7/s
 61 
 62 __ Created Temp ________________________________________________________
 63 Disk table      2.36k     0.0/s
 64 Table          23.95k     0.0/s    Size:  16.0M
 65 File                6     0.0/s
 66 
 67 __ Threads _____________________________________________________________
 68 Running             5 of    5
 69 Cached              0 of    0      %Hit:      0
 70 Created       411.49k     0.7/s
 71 Slow                0       0/s
 72 
 73 __ Aborted _____________________________________________________________
 74 Clients             0       0/s
 75 Connects            1     0.0/s
 76 
 77 __ Bytes _______________________________________________________________
 78 Sent           74.58G  124.2k/s
 79 Received       41.33G   68.8k/s
 80 
 81 __ InnoDB Buffer Pool __________________________________________________
 82 Usage         320.58M of   2.00G  %Used:  15.65
 83 Read hit      100.00%
 84 Pages
 85   Free        110.55k            %Total:  84.35
 86   Data         17.89k                     13.65 %Drty:   0.00
 87   Misc           2622                      2.00
 88   Latched                                  0.00
 89 Reads           3.07G    5.1k/s
 90   From file    12.54k     0.0/s            0.00
 91   Ahead Rnd         0       0/s
 92   Ahead Sql                 0/s
 93 Writes          7.10M    11.8/s
 94 Flushes       124.23k     0.2/s
 95 Wait Free           0       0/s
 96 
 97 __ InnoDB Lock _________________________________________________________
 98 Waits               3     0.0/s
 99 Current             0
100 Time acquiring
101   Total             5 ms
102   Average           1 ms
103   Max               5 ms
104 
105 __ InnoDB Data, Pages, Rows ____________________________________________
106 Data
107   Reads        15.13k     0.0/s
108   Writes        1.84M     3.1/s
109   fsync        85.88k     0.1/s
110   Pending
111     Reads           0
112     Writes          0
113     fsync           0
114 
115 Pages
116   Created       2.90k     0.0/s
117   Read         14.99k     0.0/s
118   Written     124.23k     0.2/s
119 
120 Rows
121   Deleted       7.32k     0.0/s
122   Inserted    817.55k     1.4/s
123   Read        800.52M    1.3k/s
124   Updated       1.58k     0.0/s

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM