楊一帆
(陜西青年職業(yè)學(xué)院,陜西 西安 710068)
MySQL數(shù)據(jù)庫是一種海量數(shù)據(jù)存儲與管理技術(shù),該技術(shù)的內(nèi)部邏輯結(jié)構(gòu)十分復(fù)雜,一般以分布式集群架構(gòu)為主,在系統(tǒng)資源有限的情況下,由于數(shù)據(jù)庫負(fù)載較高,因此在運(yùn)行過程中十分容易出現(xiàn)故障。為維護(hù)系統(tǒng)穩(wěn)定運(yùn)行,有必要對MySQL 數(shù)據(jù)庫進(jìn)行實(shí)時(shí)的在線監(jiān)測,建立完整有效的MySQL數(shù)據(jù)庫在線監(jiān)測系統(tǒng)[1-3]。
本次研究所設(shè)計(jì)的MySQL 數(shù)據(jù)庫在線監(jiān)測系統(tǒng)基本結(jié)構(gòu)如圖1所示。
MySQL 數(shù)據(jù)庫在線監(jiān)測系統(tǒng)的程序運(yùn)行流程基本如下:(1)通過Linux Corn 定時(shí)器采集系統(tǒng)原始指標(biāo)數(shù)據(jù);(2)根據(jù)上層監(jiān)測指標(biāo)對數(shù)據(jù)庫運(yùn)行狀態(tài)進(jìn)行計(jì)算,在指標(biāo)值超出特定閾值的情況下發(fā)出警告,同時(shí)合并監(jiān)測指標(biāo)數(shù)據(jù);(3)向Agent節(jié)點(diǎn)上傳合并結(jié)果文件,通過Agent節(jié)點(diǎn)對監(jiān)測指標(biāo)數(shù)據(jù)文件加以解析;(4)將解析后的數(shù)據(jù)上傳至數(shù)據(jù)庫,最后通過前臺應(yīng)用對各項(xiàng)指標(biāo)信息加以展示。
本次研究所設(shè)計(jì)的MySQL數(shù)據(jù)庫在線監(jiān)測系統(tǒng)由7個(gè)主要的功能模塊所組成,分別為前端邏輯展現(xiàn)模塊、監(jiān)測指標(biāo)數(shù)據(jù)入庫模塊、監(jiān)測指標(biāo)合并上傳模塊、監(jiān)測指標(biāo)計(jì)算注冊模塊、異常狀態(tài)告警模塊、監(jiān)測指標(biāo)數(shù)據(jù)獲取模塊以及系統(tǒng)數(shù)據(jù)集合獲取模塊。其中監(jiān)測指標(biāo)計(jì)算注冊模塊、監(jiān)測指標(biāo)數(shù)據(jù)獲取模塊和系統(tǒng)數(shù)據(jù)信息獲取模塊是MySQL數(shù)據(jù)庫在線監(jiān)測系統(tǒng)的核心功能模塊。
(1) 獲取MySQL狀態(tài)參數(shù)數(shù)據(jù)
MySQL數(shù)據(jù)庫在線監(jiān)測系統(tǒng)采取執(zhí)行MySQL命令的方式獲取MySQL狀態(tài)參數(shù),具體包括how slave status、show processlist、show variables、show global status等命令[4-5];
(2) 獲取MySQL配置文件信息
MySQL啟動時(shí)所加載的配置信息即為MySQL配置文件信息,該信息存儲于MySQL 配置文件所在目錄中,在該目錄中讀取并解析MySQL 配置文件即可獲取多實(shí)例啟動設(shè)置、二進(jìn)制日志是否打開、DNS 反解是否打開、數(shù)據(jù)目錄位置等信息[6-7];
(3) 獲取MySQL賬號權(quán)限數(shù)據(jù)
MySQL數(shù)據(jù)庫在線監(jiān)測系統(tǒng)在與MySQL數(shù)據(jù)庫連接后可利用show grants 命令獲取MySQL 賬號權(quán)限數(shù)據(jù),例如數(shù)據(jù)庫用戶權(quán)限信息以及用戶列表等[8-9];
(4) 獲取MySQL進(jìn)程pid信息
系統(tǒng)為MySQL 數(shù)據(jù)庫分配的進(jìn)程ID 號即為My-SQL進(jìn)程pid信息,該信息可采取執(zhí)行l(wèi)inux命令ps的方式獲取[10-11];
(5) 獲取服務(wù)器狀態(tài)數(shù)據(jù)信息
服務(wù)器狀態(tài)數(shù)據(jù)信息具體包括磁盤占用率、內(nèi)存占用率以及CPU占用率等硬件運(yùn)行狀態(tài)信息,主要用于展示服務(wù)器當(dāng)前的負(fù)載壓力。在系統(tǒng)功能設(shè)計(jì)中,可以通過對服務(wù)器運(yùn)行狀態(tài)文件/proc/meminfo/proc/cpuinfo加以分析的方式獲取服務(wù)器狀態(tài)數(shù)據(jù)信息[12-13]。
本次研究通過文本解析類的方式來解析并獲取監(jiān)測指標(biāo)數(shù)據(jù),相關(guān)操作主要涉及錯誤日志解析、慢查詢?nèi)罩窘馕龊蚆ySQL配置文件解析。
(1) 錯誤日志解析
MySQL 數(shù)據(jù)庫錯誤日志的路徑信息為error_log_name,因此通過/usr/bin/tailn 50 error_log_name 命令直接提取錯誤日志文件中最后50行數(shù)據(jù);
(2) 慢查詢?nèi)罩窘馕?/p>
MySQL 數(shù)據(jù)庫的慢查詢文件路徑信息為slowquery_filename,因此可以在mysqldumpslow工具中輸入/usr/bin/mysqldumpslowt 30 -s at slowquery_filename 命令直接解析慢查詢文件,進(jìn)而提取最慢的30個(gè)慢查詢;
(3) MySQL配置文件解析
直接針對MySQL配置文件加以解析即可獲取Unix socket 文件位置、數(shù)據(jù)目錄datadir、慢查詢?nèi)罩疚恢?、錯誤日志位置等信息。
為了進(jìn)一步提高系統(tǒng)擴(kuò)展性,本次研究還為MySQL數(shù)據(jù)庫在線監(jiān)測系統(tǒng)設(shè)置了監(jiān)測指標(biāo)注冊模塊,該模塊也是整個(gè)在線監(jiān)測系統(tǒng)的中樞機(jī)構(gòu),主要負(fù)責(zé)維護(hù)監(jiān)測指標(biāo)數(shù)據(jù)獲取模塊和數(shù)據(jù)信息獲取模塊之間的對應(yīng)關(guān)系,該模塊的具體結(jié)構(gòu)如圖2所示。
本次研究所設(shè)計(jì)的MySQL數(shù)據(jù)庫在線監(jiān)測系統(tǒng)共包含13 張數(shù)據(jù)庫表,分別為告警記錄表、告警閾值表、監(jiān)測指標(biāo)數(shù)據(jù)表、數(shù)據(jù)中心信息表、文件指標(biāo)信息表、實(shí)時(shí)指標(biāo)信息表、用戶業(yè)務(wù)對應(yīng)表、業(yè)務(wù)表、系統(tǒng)操作記錄表、常規(guī)操作記錄表、用戶權(quán)限表、操作對象表以及用戶信息表,部分?jǐn)?shù)據(jù)庫表的設(shè)計(jì)方案如表1、表2、表3所示。
表1 告警記錄表
表2 告警閾值表
表3 監(jiān)測指標(biāo)數(shù)據(jù)表
在MySQL 數(shù)據(jù)庫在線監(jiān)測系統(tǒng)的數(shù)據(jù)庫設(shè)計(jì)方案中,本次研究將告警記錄表記為T_Alarm_Log,將告警閾值表記為T_Alarm,將指標(biāo)信息表記為T_Realtime_Index,數(shù)據(jù)中心信息表記為T_IDC,將文件指標(biāo)數(shù)據(jù)表記為T_File_Index_Info,將監(jiān)測數(shù)據(jù)存儲表為T_MySQL_Index_Data,將系統(tǒng)操作記錄表記為T_Sys_Oper_Log,將常規(guī)操作記錄表記為T_Oper_Log,將操作對象表記為T_OpObject,將用戶授權(quán)表記為T_Athority,將用戶業(yè)務(wù)關(guān)聯(lián)表記為T_Business_User,將業(yè)務(wù)表記為T_Business,將用戶表記為T_User。最終所建立了數(shù)據(jù)庫關(guān)系如圖3所示。
以系統(tǒng)數(shù)據(jù)信息獲取模塊中的MySQL 實(shí)例狀態(tài)獲取功能為例,該功能主要負(fù)責(zé)獲取SQL 數(shù)據(jù)庫的用戶權(quán)限數(shù)據(jù)、連接用戶信息數(shù)據(jù)、參數(shù)變量數(shù)據(jù)以及實(shí)例的運(yùn)行狀態(tài)數(shù)據(jù)。在系統(tǒng)功能實(shí)現(xiàn)方面可以利用MySQL專屬的管理員命令獲取以上數(shù)據(jù),相關(guān)命令以及所對應(yīng)的功能如下:
(1) show full processlist命令
獲取與MySQL實(shí)例連接的相關(guān)進(jìn)程信息,例如運(yùn)行狀態(tài)信息、IP信息等;
(2) show global status命令
獲取MySQL 各項(xiàng)運(yùn)行狀態(tài)信息,一共包含222 個(gè)數(shù)據(jù)庫運(yùn)行狀態(tài)指標(biāo);
(3) show variables命令
獲取MySQL運(yùn)行各參數(shù)的設(shè)定值,進(jìn)而展示MySQL實(shí)例的對應(yīng)配置。
MySQL實(shí)例狀態(tài)獲取功能的程序運(yùn)行流程如圖4所示。
該功能最終的界面展示結(jié)果如圖5所示。
本文詳細(xì)介紹了MySQL 數(shù)據(jù)庫在線監(jiān)測系統(tǒng)的設(shè)計(jì)思路、功能結(jié)構(gòu)以及核心功能的界面展示結(jié)果。在未來的研究中,還需要進(jìn)一步將數(shù)據(jù)可視化技術(shù)應(yīng)用于MySQL數(shù)據(jù)庫監(jiān)測指標(biāo)展示,進(jìn)而建立起圖形化的查詢界面,方便管理者對MySQL數(shù)據(jù)庫進(jìn)行實(shí)時(shí)觀察。