mysqlreport 詳解2010-05-16 23:16
進行MySQL的配置最佳化,首先必須找出MySQL的效能瓶頸所在;而SHOW STATUS輸出的報告正是用來計算效能瓶頸的參考資料。mysqlreport不像SHOW STATUS那樣簡單的羅列資料,而是對這些參考資料加以融合計算,整理成一個個最佳化參考點,然後DBA就可以根據這個最佳化參考點的值以及該點的衡量標準,進行對應調整。這篇文章既不分析mysqlreport的報告含義,也不說明最佳化參考點的計算公式和原理,只簡單描述使用方法。後面再逐次深入分析。 mysqlreport首頁和 web site:http://hackmysql.com/mysqlreport download:http://hackmysql.com/scripts/mysqlreport-3.5.tgz mysqlreport的安裝極為簡單,下載上述文檔後,使用tar -xvf mysqlreport-3.5.tar解壓後,在目前的目錄組建檔案夾mysqlreport-3.5,該檔案夾下的mysqlreport即是可執行程式。 注意:mysqlreport為perl指令碼,用到DBI以及DBD::mysql,須正確安裝後才能正常使用! mysqlreport命令列選項參數 linux-8tpn:/home/kevin/perl # perl mysqlreport --help mysqlreport v3.5 Apr 16 2008 mysqlreport makes an easy-to-read report of important MySQL status values. Command line options (abbreviations work): --user USER Connect to MySQL as USER --password PASS Use PASS or prompt for MySQL user's password --host ADDRESS Connect to MySQL at ADDRESS --port PORT Connect to MySQL at PORT --socket SOCKET Connect to MySQL at SOCKET --no-mycnf Don't read ~/.my.cnf --infile FILE Read status values from FILE instead of MySQL --outfile FILE Write report to FILE --email ADDRESS Email report to ADDRESS (doesn't work on Windows) --flush-status Issue FLUSH STATUS; after getting current values --relative X Generate relative reports. If X is an integer, reports are live from the MySQL server X seconds apart. If X is a list of infiles (file1 file2 etc.), reports are generated from the infiles in the order that they are given. --report-count N Collect N number of live relative reports (default 1) --detach Fork and detach from terminal (run in background) --help Prints this --debug Print debugging information Visit http://hackmysql.com/mysqlreport for more information.
選項 |
解釋 |
- -user |
串連MySQL的使用者名稱 |
- -password |
串連MySQL的使用者密碼。命令列上出現該選項但沒有給出參數時,mysqlreport將在使用者斷行符號後提示輸入密碼 |
- -host |
MySQL伺服器位址 |
- -port |
MySQL伺服器的開發連接埠 |
- -socket |
本地MySQL UNIX域套介面路徑 |
- -no-mycnf |
該選項指引mysqlreport不要讀取 ~/.my.cnf,預設情況下會去讀取這個檔案。- -user 和 - -password 總是覆蓋從 ~/.my.cnf 中取得的參數 |
- -infile |
從status檔案讀取資料,代替從伺服器上讀取 |
- -outfile |
列印報告後,將報告同時寫入該選項指定的檔案中。mysqlreport 的內部機制總是先將報告寫入臨時檔案中,然後將該臨時檔案裡的內容列印到螢幕上。如果指定了- -outfile選項,則將臨時檔案拷貝成 指定的檔案。如果指定了選項- -email,則會刪除臨時檔案 |
- -email |
列印報告後,將結果發送到指定的郵箱。該選項需要使用/usr/sbin/目錄下的sendmail程式,因此無法在windows 平台下使用。/usr/sbin/sendmail可以符號連結到 qmail,或者任何其他能類比sendmail -t方式的MTA程式。郵件來源是:mysqlreport,主題是:MySQL status report on HOST,HOST是mysqlreport所在的主機名稱,可能是讀取到的- -host值,預設是localhost |
- -flush-status |
列印報告後,運行FLUSH STATUS命令 |
- -relative |
mysqlreport通常產生從MySQL啟動以來的狀態報表。指定- -relative選項可產生相對於前次報告以來的相關報告。 如果選項參數是一個整數,程式每隔指定的秒數後再次產生一份狀態報表,報告次數由- -report-count選項指定。預設產生1份相關報告。例如,指定- -relative的值為60,則會產生2份報告:第一份基本報告馬上產生,第二份相關報告在60秒後產生。第二份報告中的數值和前面的那份相關。例如,前者總共有10.00k次查詢,在這60秒的間隔時間裡接受了新的1.00k次查詢,則後者的總查詢次數是1.00k而非11.00k次。 如果選項參數是本地檔案清單(就像- -infile選項那樣),程式會按照參數中檔案的順序來依次產生狀態報表。檔案清單中的檔案應該以空格分隔。以檔案產生時間依次排列檔案就顯得很重要,較早產生的檔案應該放在列表的前面。第一個檔案中必須有系統變數,例如:key_buffer_size、table_cache 等。每個檔案中可以有多組”SHOW STATUS”的結果。注意:通過 “mysqladmin -r -i N extended” 產生的狀態檔案無法使用,因為 mysqladmin的-r參數已經令其產生了具有相對性的狀態值了。 由於mysqlreport首先會把狀態報表寫到臨時檔案中,如果- -relative的參數是整數時,mysqlreport會顯示它把檔案寫到哪了。那麼就可以直接通過查看這些檔案內容來觀察伺服器的狀況 |
- -report-count |
產生N份相關的報告。本選項只有在同時啟用- -relative選項後才有效。mysqlreport會自動產生N+1份報告:第一份基本報告,以及後面的N份相關報告 |
- -detach |
本選項使得mysqlreport派生新進程,從終端上脫離轉入後台繼續運行。派生新進程後,mysqlreport 會報告它把結果寫入了哪個臨時檔案。本選項需要- -outfile或- -email中的一個,如果這兩個選項都沒有給出,則產生的臨時檔案就會被刪除,因為自派生出新進程後,無法再將結果列印到終端螢幕上了。本選項如果和- -relative選項一起使用的話就更有意義了,這樣mysqlreport就能定時報告資訊,而無需人工幹預獲得報告。例如使用如下命令,就能讓mysqlrepot隔一個小時再次產生一次報告,並將結果發送到指定的信箱:perl mysqlreport - -relative=3600 - -detach - -email=host@domain.com。一個小時候後,mysqlreport通過email發送報告,刪除臨時檔案,並且乾淨地終止 |
- -help |
列印協助資訊 |
- -debug |
列印調試資訊 |
使用mysqlreport的簡單例子 1.串連遠端資料庫192.168.12.14 perl mysqlreport - -host=192.168.12.14 - -user=db_user - -password=db_user_password 2.通過本地UNIX域套介面檔案/data/mysql_data/mysql.sock串連本機資料庫 perl mysqlreport - -user=root - -password=root_password - -socket=/data/mysql_data/mysql.sock 3.將輸出報告寫入檔案/data/mysql_data/report/mysqlreport.txt perl mysqlreport - -user=root - -password=root_password - -socket=/data/mysql_data/mysql.sock - -outfile=/data/mysql_data/report/mysqlreport.txt |