劉言
1引言
隨著信息科技的迅猛發展,開源數據庫軟件在銀行業逐漸普及,開源數據庫和Oracle與SQL Server數據庫等數據庫一樣被廣泛使用。為確保開源數據庫穩定運行,對開源數據庫Mysql的狀態監控、性能評估、性能趨勢分析和異常告警變得非常重要。本文結合數據庫各種監控指標,并與多種開源數據庫監控軟件進行對比,同時根據工作需要,建設Mysql數據庫開源監控系統,實現對Mysql數據庫服務器系統,包括CPU、內存和磁盤等基礎性能的監控、告警;實現對Mysql各種常見性能指標的監控和趨勢分析,實現對Mysql運行當前和歷史sql語句分析。
2研究背景
我行提出打造一流數字生態銀行戰略,積極推行開源思路,生產環境中逐步安裝部署了25套Mysql社區版的Mysql數據庫。目前對Mysql數據庫監控僅有主機和Mysql服務狀態的OVO監控,缺少對Mysql數據庫的參數、庫表、Mysql請求、連接、會話和SQL語句等監控。考慮在數據庫集中管理系統中引進開源的Mysql監控工具對生產環境中Mysql數據庫進行專業監控。
3PMM系統建設的目標和范圍
3.1項目目標
引入開源PMM(Percona Monitoring and Management)軟件對生產環境Mysql及MongoDB進行監控,提升對Mysql數據庫的監控水平,便于日常監控和排錯,提升Mysql管理水平。
3.2項目范圍
根據本次項目的實施目標,在辦公和業務環境各部署1臺CENTOS 7服務器搭建基于Docker的PMM軟件分別監控辦公和業務環境中的Mysql數據庫服務。
4功能性需求
4.1Mysql服務器性能監控
在分析Mysql性能時需要了解服務器CPU、內存、網絡和磁盤IO等信息,在分析數據庫大小增長趨勢時需要了解服務器分區信息。在Mysql監控工具中需要集成對操作系統的CPU、內存、磁盤IO和網絡等監控。
4.2Mysql參數監控
在生產環境中部署的Mysql有些是按照標準步驟安裝部署,有些是應用產品自帶的配置,為了了解Mysql運行情況需要知道Mysql配置和性能相關的參數。
4.3Mysql庫表監控
通過Mysql監控平臺能查詢到被監控Mysql服務器上數據庫和數據庫中表信息,包括名稱、大小以及庫和表的增長情況。
4.4Mysql歷史執行語句記錄及分析
在生產問題排錯過程中很多問題可能是短時存在的,登錄Mysql服務器排查問題時如果問題未重現,很難對問題進行定位。需要Mysql監控軟件對數據庫執行語句進行實時監控,記錄消耗CPU和內存等資源及造成阻塞的sql語句,對sql語句的執行計劃進行分析,了解語句執行過程中使用的索引。便于對已經出現過問題進行定位。
4.5Mysql相關告警
在Mysql監控軟件中希望能通過郵件或其他方式將超過閥值或基線的信息告警通知管理員,讓管理員能及時了解服務器中信息。
4.6Mysql語句執行計劃分析
Mysql自帶的sql語句分析需要登錄系統抓取數據后才可分析,而我們希望Mysql監控軟件能通過更簡單的方式,通過Web或客戶端的方式對已經執行過的sql語句進行分析,了解語句執行步驟、調用索引和語句執行時間等,了解語句是否可以進行優化提升sql性能。
4.7Mysql高可用性監控
目前Mysql通過HA或通過復制技術實現高可用性,監控軟件需要對Mysql的可用性及高可用性進行監控。能檢測Mysql多主復制、主從復制和多從復制等復制狀態,對復制隊列、復制延時等內容進行監控,在超過閥值時可以發出告警。
5PMM系統建設的技術實現

Mysql數據庫開源監控軟件PMM系統建設內容:服務器硬件平臺、系統軟件、基于開源軟件的應用開發、網絡系統、存儲系統、災備與恢復系統、運維監控、開發測試環境和信息跨網發布等。
目前Mysql監控軟件種類比較多,有些是偏向安裝、配置管理,有些是偏向監控、告警。PMM是Mysql監控告警類軟件中功能較全,擁有大量(150 000+)使用用戶,是安全、穩定且使用簡單的開源產品,且無額外費用。目前同業中已有使用PMM作為Mysql監控工具,也部分同業對Mysql的監控尚在摸索之中。目前生產環境中Mysql數據庫使用越來越多,而對Mysql的監控不足已影響到日常Mysql的高效運維。如引進其他收費的監控產品,引進產品周期較長;而若引入PMM開源軟件,無相應采購等環節,能較快實現生產環境Mysql監控部署,快速解決監控缺位問題,同時也滿足行內優先考慮開源軟件的指導思想。
6結束語
通過項目實施,對目前生產中的80臺服務器和156個Mysql數據庫實例實施了監控,配置了相關Mysql功能和性能指標告警,在生產出現異常時,PMM軟件通過郵件將異常信息通知管理員,管理員通過PMM監控軟件查看近期Mysql服務器性能指標和Mysql語句分析來成功定位問題原因。引入PMM開源軟件對運維人員定位生產數據庫異常、監控Mysql提供了方法,提高了運維效率。