天天看點

MySQL監控、性能分析——工具篇

MySQL越來越被更多企業接受,随着企業發展,MySQL存儲資料日益膨脹,MySQL的性能分析、監控預警、容量擴充議題越來越多。“工欲善其事,必先利其器”,那麼我們如何在進行MySQL性能分析、監控預警、容量擴充問題上得到更好的解決方案,就要利用各種工具來對MySQL各種名額進行分析。本文是讀書筆記,下面提及的工具,讀者可能都用過,或打算準備是使用。

MySQL伺服器的釋出包沒有包含那些能完成許多常見任務的工具,例如監控伺服器的工具、比較伺服器間資料的工具。我們把這些工具分成以下幾類:界面、監控、分析和輔助工具。

帶界面的工具

1、MySQL可視化工具

這些工具都可以免費使用:

a、MySQL查詢浏覽器(MySQL Query Browser):這個不用說了… b、MySQL管理者(MySQL Administrator):功能集中在伺服器管理上,是以它最适合DBA使用,而不是開發人員和分析人員。它可以幫助DBA把建立備份 、建立使用者并配置設定權限、顯示伺服器日志和狀态資訊等過程進行自動化處理。它還包括了一些基本的監控功能,例如圖形化的狀态變量顯示,但是它沒有下文裡會提到的互動式監控工具那麼靈活。 c、MySQL遷移工具箱(MySQL Migration Tookit):可以幫你把資料從别的資料庫系統遷移到MySQL裡。 d、MySQL工作台(MySQL Workbench):MySQL的模組化工具。

2、SQLyog

SQLyog是最常用的MySQL可視化工具,隻能用于win下。

3、phpMyAdmin

phpMyAdmin是一款很流行的管理工具,它基于Web界面來管理MySQL伺服器。有很多支援者,但反對者也不少。

監控工具

MySQL監控是一個很大複雜的任務,不同的應用有着不同的需求。“監控”是大家濫用的術語之一,承載了幾重意思。我們講到的監控工具被分為非互動的和互動的兩類。非互動監控常常就是一個自動化系統,它接收系統的測量值,如果有超出安全範圍的,就通過發出警告提醒管理者。互動監控工具可以讓你實時地觀測伺服器。

你可能對監控工具在其他方面的差别也很感興趣,例如被動監控和主動監控,後者會發送報警資訊并作出初步反應(就像Nagios一樣);或者你可能正在尋找這樣一工具:它可以建立一個資訊倉庫,而不僅僅是顯示目前的統計資訊。有許多監控系統不是專為監控MySQL而設計的,它們就是一個通用系統,裡面設計了一個周期性的任務,定時去檢查各類資源的狀态,例如像伺服器、路由器、以及各種軟體(包括MySQL)。它們常常會提供一個插件架構,同時有一個預訂的MySQL插件可供使用。這樣的一些系統能夠記錄監控對象的狀态,并通過web界面用圖形化的形式表示出來。當監控對象出現問題,或者狀态值超過安全範圍時,它們還能發送報警資訊,或者執行一個初始化的動作。

a、非互動性工具

1、Nagios

監控界流行一句話:隻要用順了Nagios,你就永遠不會再想到其它監控系統。

對于Nagios本blog會持續推出相關文章,現在隻是引用Nagios官方的介紹:

Nagios是一款用于系統和網絡監控的應用程式。它可以在你設定的條件下對主機和服務進行監控,在狀态變差和變好的時候給出告警資訊。

Nagios最初被設計為在Linux系統之上運作,然而它同樣可以在類Unix的系統之上運作。

Nagios更進一步的特征包括:監控網絡服務(SMTP、POP3、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少,它的報警功能也不夠進階。

2、MySQL監控和建議服務

MySQL自己的監控方案就是設計用來監控MySQL執行個體的,但也能夠監控主機的一些關鍵方面。這個工具不是開源的,需要MySQL企業訂閱費。

3、MONyog

MONyog是一個輕量級的無代理的監控系統,它跟以上那些工具有着不同實作方法:它的底層是一個JavaScript引擎,所有配置都是通過JavaScrpt對象模型來完成的。它被設計為在桌面系統上運作,運作時它會在一個閑置的端口上打開一個HTTP監聽器。這樣,你就可以把你的浏覽器指向這個端口,檢視MySQL伺服器的資訊了,這資訊都是結合了Javascript和Flash來表示的。MONyog實際上有互動式和非互動式兩種類型,是以,你可以把兩種類型的監控功能都嘗試着用用看。

4、基于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 工具(這個很出名,可惜已停止更新)

1、Mysqlreport 2、Mysqlsla

b、Maatkit分析工具

一系列指令行工具的集合。

MySQL的輔助工具

MySQL裡有幾個工具是為了消除MySQL提供的功能與它自帶的指令行工具之間的隔閡。

a、MySQL Proxy

b、Dormando的MySQL代理