MySQL愈來愈被更多企業接受,隨着企業發展,MySQL存儲數據日益膨脹,MySQL的性能分析、監控預警、容量擴展議題愈來愈多。「工欲善其事,必先利其器」,那麼咱們如何在進行MySQL性能分析、監控預警、容量擴展問題上獲得更好的解決方案,就要利用各類工具來對MySQL各類指標進行分析。本文是讀書筆記,下面說起的工具,讀者可能都用過,或打算準備是使用。
MySQL服務器的發佈包沒有包含那些能完成許多常見任務的工具,例如監控服務器的工具、比較服務器間數據的工具。咱們把這些工具分紅如下幾類:界面、監控、分析和輔助工具。php
帶界面的工具
一、MySQL可視化工具
這些工具均可以避免費使用: mysql
a、MySQL查詢瀏覽器(MySQL Query Browser):這個不用說了…
b、MySQL管理員(MySQL Administrator):功能集中在服務器管理上,因此它最適合DBA使用,而不是開發人員和分析人員。它能夠幫助DBA把建立備份 、建立用戶並分配權限、顯示服務器日誌和狀態信息等過程進行自動化處理。它還包括了一些基本的監控功能,例如圖形化的狀態變量顯示,可是它沒有下文裏會提到的交互式監控工具那麼靈活。
c、MySQL遷移工具箱(MySQL Migration Tookit):能夠幫你把數據從別的數據庫系統遷移到MySQL裏。
d、MySQL工做臺(MySQL Workbench):MySQL的建模工具。ios
二、SQLyog
SQLyog是最經常使用的MySQL可視化工具,只能用於win下。web
三、phpMyAdmin
phpMyAdmin是一款很流行的管理工具,它基於Web界面來管理MySQL服務器。有不少支持者,但反對者也很多。sql
監控工具
MySQL監控是一個很大複雜的任務,不一樣的應用有着不一樣的需求。「監控」是你們濫用的術語之一,承載了幾重意思。咱們講到的監控工具被分爲非互動的和互動的兩類。非互動監控經常就是一個自動化系統,它接收系統的測量值,若是有超出安全範圍的,就經過發出警告提醒管理員。互動監控工具可讓你實時地觀測服務器。 數據庫
你可能對監控工具在其餘方面的差異也很感興趣,例如被動監控和主動監控,後者會發送報警信息並做出初步反應(就像Nagios同樣);或者你可能正在尋找這樣一工具:它能夠建立一個信息倉庫,而不只僅是顯示當前的統計信息。有許多監控系統不是專爲監控MySQL而設計的,它們就是一個通用系統,裏面設計了一個週期性的任務,定時去檢查各種資源的狀態,例如像服務器、路由器、以及各類軟件(包括MySQL)。它們經常會提供一個插件架構,同時有一個預訂的MySQL插件可供使用。這樣的一些系統可以記錄監控對象的狀態,並經過web界面用圖形化的形式表示出來。當監控對象出現問題,或者狀態值超過安全範圍時,它們還能發送報警信息,或者執行一個初始化的動做。瀏覽器
a、非交互性工具安全
一、Nagios
監控界流行一句話:只要用順了Nagios,你就永遠不會再想到其它監控系統。
對於Nagios本blog會持續推出相關文章,如今只是引用Nagios官方的介紹:
Nagios是一款用於系統和網絡監控的應用程序。它能夠在你設定的條件下對主機和服務進行監控,在狀態變差和變好的時候給出告警信息。
Nagios最初被設計爲在Linux系統之上運行,然而它一樣能夠在類Unix的系統之上運行。
Nagios更進一步的特徵包括:監控網絡服務(SMTP、POP三、HTTP、NNTP、PING等);
監控主機資源(處理器負荷、磁盤利用率等);
簡單地插件設計使得用戶能夠方便地擴展本身服務的檢測方法;
並行服務檢查機制;
具有定義網絡分層結構的能力,用」parent」主機定義來表達網絡主機間的關係,這種關係可被用來發現和明晰主機宕機或不可達狀態;
當服務或主機問題產生與解決時將告警發送給聯繫人(經過EMail、短信、用戶定義方式);
具有定義事件句柄功能,它能夠在主機或服務的事件發生時獲取更多問題定位;
自動的日誌回滾;能夠支持並實現對主機的冗餘監控;可選的WEB界面用於查看當前的網絡狀態、通知和故障歷史、日誌文件等;服務器
下面是可代替Nagios的工具:網絡
i、Zenoss
Zenoss是用Python編寫的,擁有基於瀏覽器的用戶界面,並使用了Ajax使操做更加快捷而富有效率。它將監控、報警、趨勢顯示、圖表顯示和記錄歷史數據等功能合成在一個統一的工具裏,它還能在網上自動發現資源,在默認狀況下,Zenoss使用SNMP從遠程機器上收集數據,但它也可使用SSH,而且支持Nagios插件。
ii、Hyperic HQ
Hyperic HQ是一款基於Java的監控系統,它的目標跟其餘同類別的軟件不太同樣,它要成爲企業級的監控系統。跟Zenoss同樣,它也能自動發現資源,支持Nagios插件,可是它的邏輯組織和架構很不同,顯得有點龐大。至於它是否是合適你的需求,那要看你的參數設置和監控的方式了。
iii、OpenNMS
OpenNMS是由Java編寫的,擁有一個活躍的開發者社區。它具有了常規的功能,例如監控和報警,也加入了圖表和趨勢顯示的功能。它的目標是高性能、伸縮性、自動化以及良好的兼容性。跟Hyperic同樣,它也企圖成爲一款企業級的監控軟件,能夠用於大型的關鍵系統上。
iv、Groundwork Open Source
Groundwork Open Source其實是基於Nagios的,它把Nagios和其餘幾個工具集成爲一個系統,並安上一個統一的門戶界面。描述它的最好方法可能就是:若是你對Nagios、Cacti及其餘工具很熟悉,而且可以花大量的時間把它們無縫地集成在一塊兒的話,你也能在家庭做坊裏作一個出來。
v、Zabbix
Zabbix是一個開源監控系統,在許多方面跟Nagios很相像,可是也有一些關鍵的不一樣點。例如:它把全部配置信息和其餘數據都存放在一個數據庫裏,而不是放在配置文件裏;它比Nagios存儲了更多類型的數據,這樣能夠生成更好的趨勢圖和歷史報告。它的網絡圖表和可視化功能也優於Nagios。不少使用它的人發現它更易配置,更具備兼容性。提及來它也能比Nagios少,它的報警功能也不夠高級。
二、MySQL監控和建議服務
MySQL本身的監控方案就是設計用來監控MySQL實例的,但也可以監控主機的一些關鍵方面。這個工具不是開源的,須要MySQL企業訂閱費。
三、MONyog
MONyog是一個輕量級的無代理的監控系統,它跟以上那些工具備着不一樣實現方法:它的底層是一個JavaScript引擎,全部配置都是經過JavaScrpt對象模型來完成的。它被設計爲在桌面系統上運行,運行時它會在一個閒置的端口上打開一個HTTP監聽器。這樣,你就能夠把你的瀏覽器指向這個端口,查看MySQL服務器的信息了,這信息都是結合了Javascript和Flash來表示的。MONyog實際上有交互式和非交互式兩種類型,所以,你能夠把兩種類型的監控功能都嘗試着用用看。
四、基於RRDTool的系統
嚴格地說,RRDTool不算是一個監控系統,可是,它很重要,有必要在此提到一下。不少組織裏都是使用幾種腳本或程序–這些通常都是自制的–從服務器那裏讀取信息,而後再保存到循環數據庫(Round-robin database,RRD)文件裏。在許多要獲取記錄生成圖表的環境下,RRD文件是一個很合適的解決方案。它們能聚合輸入的數據,若是輸入數據值沒有定期在隨後提交進行時,還能在隨後插入這些丟失的數據。它們還都帶有強大的圖表工具,可以生成漂亮的不同凡響的圖表。如今已經有一些基於RRDTOOL的系統可供使用了。
a、Muti Router Traffic Grapher,或者叫MRTG就是一款典型的基於RRDTOOL的系統。它真正的設計初衷是記錄網絡數據流,可是它也被擴展用來記錄和圖表化表示其餘一些東西。
b、Munin是一個能爲你採集數據的系統,將它放入RRDTool後,就會根據數據生成不一樣粒度的圖表。它能從配置信息裏生成靜態的HTML文件,這樣你就能夠輕鬆地瀏覽,查看趨勢狀況。
c、Cacti是另一個經常使用的圖表和趨勢顯示系統。它的工做方式是:從系統裏獲取數據,而後保存在RRD文件裏,而後用PHP Web界面的形式,使用RRDTool把數據以圖表的形式展現出來。這個顯示界面也是配置和管理界面(配置信息存儲在一個MySQL服務器裏)。它是模板驅動的,所以,你能夠本身定義模板,並放到你的系統裏使用。d、Cricket是一個用Perl編寫的跟Cacti相似的系統,使用的是基於文件的配置系統。Ganglia也跟Cacti相似,但它的設計初衷是永遠監控羣集和系統網絡,所以,你能夠查看到由許多服務器信息聚合獲得的結果,也能夠按照你的意願,查看單獨某臺服務器的信息。(Cacti和Cricket沒法顯示聚合數據。)
以上這些系統均可以被用做MySQL系統信息的收集、記錄、圖表化數據和報告,它們在用途方面差別較小,都具有了不一樣程度的兼容性。可是,它們缺少真正意義上的兼容性,好比當某些東西出錯時,它要可以有針對性地發送報警信息給某些人。它們中的一些甚至沒有「錯誤」的概念。因此,有些人把這一點看做是此類系統的一大缺點,以爲最好仍是把記錄、圖表化表示、報警這幾項功能都獨立開來。事實上,Munin特意設計了使用Nagios來做爲它的報警系統。然而,對於其餘幾個來講,這的確是缺點。另外還有一個缺點就是安裝和配置這樣一個系統,使其能徹底知足你需求,須投入不少時間和努力,不過,這一點也並非這樣。
最後,RRD文件沒法讓你使用SQL或其餘標準方法來查詢它裏面的數據。並且,在默認狀況下,它永遠會以一種剛好的粒度來存儲數據,許多MySQL管理員就不肯意接受這種限制,轉而選擇一個關係數據庫來存儲這些歷史數據。
b、交互性工具
交互性工具就是那些在你須要時就能夠啓動起來,並以視圖顯示的形式不斷獲取最新服務器狀態的軟件。
innotop
innotop是一個經過文本模式顯示MySQL和InnoDB的監測工具。它有不少特色,快速的配置的,易於使用等。它吸收了MYTOP的精華這使它變得更增強大。innotop是用PERL語言寫成的,這是它能更加靈活的使用在各類操做平臺之上,它能詳細的的監控出當前MYSQL和INNODB運行的狀態,以便維護人員根據結果合理的優化MYSQL,讓MYSQL更穩定更高效的運行。安裝INNOTOP工具很是的簡單,既然是由PERL寫的,固然須要PERL環境和相關的工具包。在安裝以前先要肯定你的系統安裝了Time::HiRes,Term::ReadKey,DBI,DBD::mysql這四個包。安裝能夠把包下載下來經過編譯安裝完成也能夠用PERL模塊安裝方式來完成。
mtop
是一個顯示MySQL服務器查詢狀態的監視器。功能包括顯示完成的查詢進程,顯示查詢優化的信息及殺死一個查詢。附加功能包括服務器性能統計,配置信息和調整技巧提示。
mytop
mytop就是類似top的MySQL監察工具。執行mytop後,它會每隔幾秒更新一次,並且也能夠針對性地監察某一個資料庫。
分析工具
分析工具能夠幫你自動化那些單調乏味的工做,如監測服務器,找出還能夠優化和調優的功能區域。這些工具能夠做爲解決性能問題的良好開端。
a、HackMySQL 工具(這個很出名,惋惜已中止更新)
一、Mysqlreport
二、Mysqlsla
b、Maatkit分析工具
一系列命令行工具的集合。
MySQL的輔助工具
MySQL裏有幾個工具是爲了消除MySQL提供的功能與它自帶的命令行工具之間的隔閡。
a、MySQL Proxy
b、Dormando的MySQL代理