欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法以及裝置與流程

文檔序號(hào):12665420閱讀:233來源:國知局
一種數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法以及裝置與流程

本發(fā)明涉及數(shù)據(jù)庫技術(shù)領(lǐng)域,特別是涉及一種數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法以及裝置。



背景技術(shù):

隨著網(wǎng)站業(yè)務(wù)的發(fā)展進(jìn)步,用戶數(shù)量以及數(shù)據(jù)量也在不斷地增加,從而導(dǎo)致數(shù)據(jù)庫的訪問量也呈線性地增長。

為了應(yīng)對(duì)日益增長的訪問量,數(shù)據(jù)庫主從同步架構(gòu)廣泛應(yīng)用于大型網(wǎng)站系統(tǒng)。例如,MYSQL主從同步架構(gòu),其中MySam引擎負(fù)責(zé)新增、修改、刪除等操作,InnoDB引擎負(fù)責(zé)查詢。數(shù)據(jù)庫主從同步架構(gòu)可以是指設(shè)立有主從兩個(gè)數(shù)據(jù)庫,主從數(shù)據(jù)庫之間的信息狀態(tài)是同步的。

數(shù)據(jù)庫主從同步狀態(tài)是決定著數(shù)據(jù)庫在高并發(fā)負(fù)載下的性能好壞,因而數(shù)據(jù)庫主從同步狀態(tài)的監(jiān)控也就顯得尤為重要?,F(xiàn)有技術(shù)中的數(shù)據(jù)主從同步狀態(tài)的監(jiān)控方法一般是人為手動(dòng)地執(zhí)行結(jié)構(gòu)化查詢語句(Structured Query Language,SQL)語句,例如show、slave以及status\G等語句,然后檢查輸出結(jié)果中的Slave_IO_Running、Slave_SQL_Running以及Seconds_Behind_Master等三個(gè)參數(shù)值,最后人工判斷數(shù)據(jù)庫主從同步狀態(tài)是否正常。但是,由于數(shù)據(jù)庫主從同步狀態(tài)的監(jiān)控是人工完成的,在進(jìn)行檢測(cè)時(shí),需要運(yùn)維人員逐一登錄每臺(tái)設(shè)備進(jìn)行檢查,而當(dāng)設(shè)備數(shù)量達(dá)至成百上千時(shí),工作量極大,進(jìn)而導(dǎo)致數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控效率較低。綜上所述,如何提高數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控效率是本領(lǐng)域亟待解決的問題。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的是提供一種數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法以及裝置,目的在于解決現(xiàn)有技術(shù)中數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控效率較低的問題。

為解決上述技術(shù)問題,本發(fā)明提供一種數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法,該方法包括:

調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果;

根據(jù)所述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常。

可選地,在所述調(diào)用監(jiān)控函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果之前還包括:

調(diào)用第二編程函數(shù),測(cè)試所述數(shù)據(jù)庫的端口狀態(tài),判斷是否符合預(yù)設(shè)連接條件;

當(dāng)符合所述預(yù)設(shè)連接條件時(shí),則進(jìn)行后續(xù)步驟;

當(dāng)不符合所述預(yù)設(shè)連接條件時(shí),生成第一告警郵件,并將所述告警郵件發(fā)送至第一預(yù)設(shè)收件人。

可選地,所述當(dāng)不符合所述預(yù)設(shè)連接條件時(shí),生成第一告警郵件,并將所述告警郵件發(fā)送至第一預(yù)設(shè)收件人包括:

獲取所述數(shù)據(jù)庫的第一異常信息;

根據(jù)所述第一異常信息以及第一預(yù)設(shè)郵件模板,生成所述第一告警郵件;

將所述第一告警郵件發(fā)送至所述第一預(yù)設(shè)收件人。

可選地,在所述根據(jù)所述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常之后還包括:

當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為正常時(shí),停止執(zhí)行監(jiān)控程序;

當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為異常時(shí),獲取所述數(shù)據(jù)庫的第二異常信息;

根據(jù)所述第二異常信息以及第二預(yù)設(shè)郵件模板,生成第二告警郵件;

將所述第二告警郵件發(fā)送至第二預(yù)設(shè)收件人。

可選地,在所述當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為正常時(shí),停止執(zhí)行監(jiān)控程序之后還包括:

在經(jīng)過預(yù)設(shè)周期之后,執(zhí)行所述監(jiān)控程序,對(duì)所述數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控。

此外,本發(fā)明還提供了一種數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的裝置,該裝置包括:

調(diào)用模塊,用于調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果;

第一判斷模塊,用于根據(jù)所述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常。

可選地,還包括:

第二判斷模塊,用于調(diào)用第二編程函數(shù),測(cè)試所述數(shù)據(jù)庫的端口狀態(tài),判斷是否符合預(yù)設(shè)連接條件;

建立模塊,用于當(dāng)符合所述預(yù)設(shè)連接條件時(shí),則進(jìn)行后續(xù)步驟;

第一告警模塊,用于當(dāng)不符合所述預(yù)設(shè)連接條件時(shí),生成第一告警郵件,并將所述告警郵件發(fā)送至第一預(yù)設(shè)收件人。

可選地,所述第一告警模塊包括:

第一異常信息獲取單元,用于獲取所述數(shù)據(jù)庫的第一異常信息;

生成單元,用于根據(jù)所述第一異常信息以及第一預(yù)設(shè)郵件模板,生成所述第一告警郵件;

發(fā)送單元,用于將所述第一告警郵件發(fā)送至所述第一預(yù)設(shè)收件人。

可選地,還包括:

停止模塊,用于當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為正常時(shí),停止執(zhí)行監(jiān)控程序;

獲取模塊,用于當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為異常時(shí),獲取所述數(shù)據(jù)庫的第二異常信息;

生成模塊,用于根據(jù)所述第二異常信息以及第二預(yù)設(shè)郵件模板,生成第二告警郵件;

發(fā)送模塊,用于將所述第二告警郵件發(fā)送至第二預(yù)設(shè)收件人。

可選地,還包括:

定時(shí)執(zhí)行模塊,用于在經(jīng)過預(yù)設(shè)周期之后,執(zhí)行所述監(jiān)控程序,對(duì)所述數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控。

本發(fā)明所提供的一種數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法以及裝置,通過調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果;根據(jù)上述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常。利用編程手段,自動(dòng)執(zhí)行結(jié)構(gòu)化查詢指令,對(duì)數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控,相較于人工執(zhí)行結(jié)構(gòu)化查詢指令對(duì)數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控,其自動(dòng)執(zhí)行結(jié)構(gòu)化查詢指令,使得數(shù)據(jù)庫的主從同步狀態(tài)的監(jiān)控效率較高,可見,本申請(qǐng)有利于提高數(shù)據(jù)庫主從同步狀態(tài)的監(jiān)控效率。

附圖說明

為了更清楚的說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控方法的一種具體實(shí)施方式的流程示意圖;

圖2為本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控裝置的結(jié)構(gòu)框圖。

具體實(shí)施方式

為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

由于數(shù)據(jù)庫以及所使用的編程語言的不同,實(shí)現(xiàn)數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方式也會(huì)有所不同,故在下文將以數(shù)據(jù)為MYSQL數(shù)據(jù)庫,編程語言為Python的場(chǎng)景下進(jìn)行介紹說明。顯而易見地,當(dāng)數(shù)據(jù)庫的類型不同,或者是所使用腳本語言的不同時(shí),具體實(shí)現(xiàn)方式也與本發(fā)明實(shí)施例的思想一致,即也落在本發(fā)明實(shí)施例的保護(hù)范圍內(nèi)。

請(qǐng)參見圖1,圖1為本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控方法的一種具體實(shí)施方式的流程示意圖,該方法包括以下步驟:

步驟101:調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果。

需要說明的是,上述第一編程函數(shù)可以是指Python語言的is Slave函數(shù),其可以數(shù)據(jù)庫自動(dòng)執(zhí)行相應(yīng)的結(jié)構(gòu)化查詢指令,以對(duì)數(shù)據(jù)的主從同步狀態(tài)進(jìn)行監(jiān)控,即利用該函數(shù),可以監(jiān)控?cái)?shù)據(jù)庫的主從同步狀態(tài)。

上述預(yù)設(shè)結(jié)構(gòu)化查詢指令可以是指SQL語句,例如,可以為show、slave以及status\G等SQL語句。其可以根據(jù)數(shù)據(jù)庫的主從同步狀態(tài),得出相應(yīng)的參數(shù)值,根據(jù)該參數(shù)值,可以判斷出數(shù)據(jù)庫的主從同步狀態(tài)是否正常。

上述執(zhí)行結(jié)果可以是指執(zhí)行SQL語句后,得出的參數(shù)值,例如,當(dāng)執(zhí)行的是show、slave以及status\G三個(gè)SQL語句時(shí),輸出結(jié)果為Slave_IO_Running、Slave_SQL_Running以及Seconds_Behind_Master三個(gè)參數(shù)值,這三個(gè)參數(shù)值即為執(zhí)行結(jié)果。

具體地,運(yùn)行基于Python語言編寫的監(jiān)控腳本,監(jiān)控腳本可以調(diào)用到第一編程函數(shù)即is Slave函數(shù),執(zhí)行SQL語句,得出相應(yīng)的參數(shù)值。

可以理解的是,主從數(shù)據(jù)庫的信息交互是基于端口的,故主從數(shù)據(jù)庫之間的端口是否暢通,影響著數(shù)據(jù)庫的主從同步狀態(tài),故可以將監(jiān)控腳本設(shè)置于主數(shù)據(jù)庫上,利用監(jiān)控腳本來測(cè)試端口的狀態(tài),即通過判斷主從數(shù)據(jù)庫之間是否可以連通,從而可以得出數(shù)據(jù)的主從同步狀態(tài)。

在本發(fā)明的一些實(shí)施例中,在上述調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果之前還可以包括:調(diào)用第二編程函數(shù),測(cè)試所述數(shù)據(jù)庫的端口狀態(tài),判斷是否符合預(yù)設(shè)連接條件;當(dāng)符合所述預(yù)設(shè)連接條件時(shí),則進(jìn)行后續(xù)步驟;當(dāng)不符合所述預(yù)設(shè)連接條件時(shí),生成第一告警郵件,并將所述告警郵件發(fā)送至第一預(yù)設(shè)收件人。

需要說明的是,上述第二編程函數(shù)可以是指Python語言中的telnet函數(shù),其可以測(cè)試服務(wù)器的地址以及端口是否暢通,即基于Python的主從數(shù)據(jù)庫之間是否可以連通。

上述預(yù)設(shè)連接條件可以是指監(jiān)控腳本與從數(shù)據(jù)庫之間的端口處于暢通狀態(tài),此時(shí),可以調(diào)用is Slave函數(shù)來監(jiān)控?cái)?shù)據(jù)庫的主從同步狀態(tài)。

當(dāng)不符合上述預(yù)設(shè)連接條件時(shí),即主從數(shù)據(jù)庫之間的不可以連通時(shí),則可以判斷數(shù)據(jù)庫的主從同步狀態(tài)出現(xiàn)異常。此時(shí),為了及時(shí)通知運(yùn)維人員,以使運(yùn)維人員可以知悉當(dāng)前的主從同步狀態(tài)出現(xiàn)異常,可以自動(dòng)生成告警郵件,并將該告警郵件發(fā)送至預(yù)先設(shè)定的收件人。

上述第一預(yù)設(shè)收件人可以是任意設(shè)定的,其具體可以表現(xiàn)為數(shù)據(jù)庫的管理員,也可以為其它預(yù)先設(shè)定的人員,在此不再限定。顯而易見地,設(shè)定收件人具體可以通過設(shè)定郵件接收地址來實(shí)現(xiàn)。而更具體地,可以通過Python語言中的ring函數(shù)來實(shí)現(xiàn)告警郵件。

更進(jìn)一步地,為了使告警郵件的收件人在得知數(shù)據(jù)庫主從同步狀態(tài)出現(xiàn)異常之后,可以及時(shí)得知出現(xiàn)異常的原因以及位置,以及時(shí)作出應(yīng)對(duì)措施,在告警郵件中可以附上異常信息,表明出現(xiàn)異常的原因和位置。

故在本發(fā)明的一些實(shí)施例中,上述當(dāng)不符合所述預(yù)設(shè)連接條件時(shí),生成第一告警郵件,并將所述告警郵件發(fā)送至第一預(yù)設(shè)收件人的過程具體可以為:獲取所述數(shù)據(jù)庫的第一異常信息;根據(jù)所述第一異常信息以及第一預(yù)設(shè)郵件模板,生成所述第一告警郵件;將所述第一告警郵件發(fā)送至所述第一預(yù)設(shè)收件人。

需要說明的是,上述第一異常信息可以是包括當(dāng)前數(shù)據(jù)庫的端口狀態(tài),例如是否暢通等,以及當(dāng)前數(shù)據(jù)庫所處的服務(wù)器是哪臺(tái)服務(wù)器。當(dāng)然,上述第一異常信息還可以包括其它類型的信息,在此不作限定。

上述第一預(yù)設(shè)郵件模板可以是指預(yù)先設(shè)置好的郵件模板,例如,可以將郵件模板的標(biāo)題設(shè)置為數(shù)據(jù)庫主從同步狀態(tài)異常提醒,而將郵件模板的內(nèi)容設(shè)置包括稱呼用語、出現(xiàn)異常的原因以及出現(xiàn)異常的數(shù)據(jù)庫所在的服務(wù)器地址等。當(dāng)然,告警郵件的模板可以任意設(shè)定的,在此不作限定。而告警郵件的發(fā)送也可以通過上文提到的ring函數(shù)實(shí)現(xiàn)。

可以看出,通過測(cè)試主從數(shù)據(jù)庫之間的端口是否可以連通,從而初步判斷數(shù)據(jù)庫的主從同步狀態(tài)是否出現(xiàn)異常,使得主從同步狀態(tài)的監(jiān)控的較便利快捷。而在判斷出數(shù)據(jù)庫的主從同步狀態(tài)出現(xiàn)異常之后,發(fā)出告警郵件,可以及時(shí)處理數(shù)據(jù)庫的主從同步狀態(tài)異常情況,保證數(shù)據(jù)庫的主從同步。

步驟102:根據(jù)所述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常。

需要說明的是,根據(jù)執(zhí)行SQL語句得出的參數(shù)值,來判斷數(shù)據(jù)庫的主從同步狀態(tài)是否出現(xiàn)異常是本領(lǐng)域技術(shù)人員所熟知的技術(shù),在此不再贅述。

可以理解的是,根據(jù)數(shù)據(jù)庫的主從同步狀態(tài)正常與否,可以進(jìn)行相應(yīng)的應(yīng)對(duì)措施。

在本發(fā)明的一些實(shí)施例中,上述根據(jù)所述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常的過程可以具體為:當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為正常時(shí),停止執(zhí)行監(jiān)控程序;當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為異常時(shí),獲取所述數(shù)據(jù)庫的第二異常信息;根據(jù)所述第二異常信息以及第二預(yù)設(shè)郵件模板,生成第二告警郵件;將所述第二告警郵件發(fā)送至第二預(yù)設(shè)收件人。

需要說明的是,上述監(jiān)控程序可以是指上文中提到的監(jiān)控腳本,其可以是指基于Python語言編寫的。

上述第二異常信息可以是指表征數(shù)據(jù)庫的主從同步狀態(tài)出現(xiàn)異常的原因,以及出現(xiàn)異常的數(shù)據(jù)庫處于哪一臺(tái)服務(wù)器的信息。當(dāng)然,上述第二異常信息還可以包括其它類型的數(shù)據(jù)庫信息。

上述第二預(yù)設(shè)郵件模板可以與上文提到的第一預(yù)設(shè)郵件模板等同,具體介紹可以參見上文相應(yīng)內(nèi)容;當(dāng)然,也可以與第一預(yù)設(shè)郵件模板不同,可以是任意設(shè)定的,在此不作限定。

上述第二預(yù)設(shè)收件人可以與上文提到的第一預(yù)設(shè)收件人等同,具體介紹可以參見上文相應(yīng)內(nèi)容;當(dāng)然,第二預(yù)設(shè)收件人也可以與第一預(yù)設(shè)收件人不同,在此不作限定。

可以理解的是,當(dāng)判斷出數(shù)據(jù)庫的主從同步狀態(tài)為正常時(shí),可以停止執(zhí)行監(jiān)控程序,也可以繼續(xù)循環(huán)執(zhí)行監(jiān)控程序,以對(duì)數(shù)據(jù)庫實(shí)現(xiàn)無間斷的監(jiān)控。

但是,無間斷地運(yùn)行監(jiān)控腳本,會(huì)占用大量的資源。為了均衡監(jiān)控效率和資源的利用率,可以定時(shí)執(zhí)行監(jiān)控腳本,即定時(shí)監(jiān)控?cái)?shù)據(jù)庫的主從同步狀態(tài)。

在本發(fā)明的一些實(shí)施例中,上述當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為正常時(shí),停止執(zhí)行監(jiān)控程序之后還可以包括:在經(jīng)過預(yù)設(shè)周期之后,執(zhí)行所述監(jiān)控程序,對(duì)所述數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控。

需要說明的是,上述預(yù)設(shè)周期可以是任意設(shè)定的,例如,可以將預(yù)設(shè)周期設(shè)定為10分鐘,此時(shí),每經(jīng)過10分鐘,則自動(dòng)執(zhí)行監(jiān)控程序即監(jiān)控腳本。

具體地,可以利用Linux/Unix crontab來實(shí)現(xiàn)定時(shí)監(jiān)控任務(wù),即在crontab內(nèi)添加定時(shí)任務(wù),這樣每隔預(yù)設(shè)周期,crontab會(huì)調(diào)用監(jiān)控程序即監(jiān)控腳本,對(duì)數(shù)據(jù)的主從同步狀態(tài)進(jìn)行監(jiān)控。

為了更好地介紹說明各個(gè)步驟的具體實(shí)現(xiàn)過程,下面將結(jié)合具體實(shí)現(xiàn)代碼來簡(jiǎn)要說明具體的Python代碼實(shí)現(xiàn)。

首先需要編寫SMTP郵件配置文件,以及創(chuàng)建Python函數(shù)__init__、__configParseMySQL__、__configParseSMTP__、__read_defaults_file__、telnet、is Slave、get_last_error、notify、close、ring函數(shù)。

然后編寫Python代碼來具體實(shí)現(xiàn)各個(gè)步驟,例如,利用telnet函數(shù)測(cè)試服務(wù)器地址以及端口是否暢通,判斷數(shù)據(jù)的主從同步狀態(tài)是否正常的過程可以具體如下:

測(cè)試服務(wù)器地址和端口是否暢通

:param host:服務(wù)器地址

:param port:服務(wù)器端口

:param timeout:測(cè)試超時(shí)時(shí)間

:return:Boolean

"""

try:

tel=telnetlib.Telnet(host,port,timeout)

tel.close()

return True

except:

return False

def connect(self):

"""

創(chuàng)建數(shù)據(jù)庫鏈接

"""

try:

config=self.__configParseMySQL__()

if self.telnet(config["host"],config["port"]):

self.__instance__=mysql.connector.connect(**config)

return True

else:

raise Exception("unable connect")

except:

self.__error__.append("無法連接服務(wù)器主機(jī):{host}:{port}".format(host=config[

"host"],port=config["port"]))

return False

defisSlave(self):

"""

數(shù)據(jù)庫同步是否正常

:return:None同步未開啟,False同步中斷,True同步正常

"""

cur=self.__instance__.cursor(dictionary=True)

cur.execute("SHOW SLAVE STATUS")

result=cur.fetchone()

cur.close()

if result:

if result["Slave_SQL_Running"]=="Yes"and result["Slave_IO_Running"]=="Yes":

return True

else:

if result["Slave_SQL_Running"]=="No":

self.__error__.append(result["Last_SQL_Error"])

else:

self.__error__.append(result["Last_IO_Error"])

return False

defget_last_error(self):

"""

獲取第一個(gè)錯(cuò)誤信息

:return:String

"""

if self.__error__:

return self.__error__.pop(0)

def notify(self,title,message):

"""

而發(fā)送告警郵件的具體代碼實(shí)現(xiàn)可以如下所示:

:param title:消息的標(biāo)題

:param message:消息的內(nèi)容

:return:

"""

msg=[title,message]

pool=[]

notify=notify_email(self.__configParseSMTP__())

pool.append(notify)

for item in pool:

item.ring(msg)

def close(self):

"""

關(guān)閉數(shù)據(jù)庫鏈接

"""

if self.__instance__:

self.__instance__.close()

class notify_email(object):

def__init__(self,config):

self.config=config

def ring(self,message=[]):

subject=message.pop(0)

messageBody="".join(message)

mailList=self.config["to"].split(";")

datetime=time.strftime("%Y-%m-%d%H:%M:%S")

for to in mailList:

body="""

<p>管理員<strong>{admin}</strong>,你好:</p>

<p style="text-indent:2em;">收到這封郵件說明你的數(shù)據(jù)庫同步出現(xiàn)異常,請(qǐng)您及時(shí)進(jìn)行處理。</p>

<p>異常信息:<br/>{body}</p>

<p style="text-align:right;">{date}</p>

""".format(admin=to,body=messageBody,date=datetime)

msg=MIMEText(body,"html","utf-8")

msg["From"]=self.config["from"]

msg["To"]=to

msg["Subject"]=subject

smtp=smtplib.SMTP()

smtp.connect(self.config["smtp_host"])

if self.config.has_key("smtp_user"):

smtp.login(self.config["smtp_user"],self.config["smtp_password"])

smtp.sendmail(self.config["from"],to,msg.as_string())

smtp.quit()

可以理解的是,上述具體的Python代碼的實(shí)現(xiàn)過程只是一種實(shí)施方式,具體的實(shí)現(xiàn)手段還可以有其它,在此不作限定。

本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法,通過調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果;根據(jù)上述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常。利用編程手段,自動(dòng)執(zhí)行結(jié)構(gòu)化查詢指令,對(duì)數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控,相較于人工執(zhí)行結(jié)構(gòu)化查詢指令對(duì)數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控,其自動(dòng)執(zhí)行結(jié)構(gòu)化查詢指令,使得數(shù)據(jù)庫的主從同步狀態(tài)的監(jiān)控效率較高,可見,該方法有利于提高數(shù)據(jù)庫主從同步狀態(tài)的監(jiān)控效率。

下面對(duì)本發(fā)明實(shí)施例提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控裝置進(jìn)行介紹,下文描述的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控裝置與上文描述的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控方法可相互對(duì)應(yīng)參照。

圖2為本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控裝置的結(jié)構(gòu)框圖,參照?qǐng)D2數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的裝置可以包括:

調(diào)用模塊201,用于調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果;

第一判斷模塊202,用于根據(jù)所述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常。

可選地,還包括:

第二判斷模塊,用于調(diào)用第二編程函數(shù),測(cè)試所述數(shù)據(jù)庫的端口狀態(tài),判斷是否符合預(yù)設(shè)連接條件;

建立模塊,用于當(dāng)符合所述預(yù)設(shè)連接條件時(shí),則進(jìn)行后續(xù)步驟;

第一告警模塊,用于當(dāng)不符合所述預(yù)設(shè)連接條件時(shí),生成第一告警郵件,并將所述告警郵件發(fā)送至第一預(yù)設(shè)收件人。

可選地,所述第一告警模塊包括:

第一異常信息獲取單元,用于獲取所述數(shù)據(jù)庫的第一異常信息;

生成單元,用于根據(jù)所述第一異常信息以及第一預(yù)設(shè)郵件模板,生成所述第一告警郵件;

發(fā)送單元,用于將所述第一告警郵件發(fā)送至所述第一預(yù)設(shè)收件人。

可選地,還包括:

停止模塊,用于當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為正常時(shí),停止執(zhí)行監(jiān)控程序;

獲取模塊,用于當(dāng)判斷出所述數(shù)據(jù)庫的主從同步狀態(tài)為異常時(shí),獲取所述數(shù)據(jù)庫的第二異常信息;

生成模塊,用于根據(jù)所述第二異常信息以及第二預(yù)設(shè)郵件模板,生成第二告警郵件;

發(fā)送模塊,用于將所述第二告警郵件發(fā)送至第二預(yù)設(shè)收件人。

可選地,還包括:

定時(shí)執(zhí)行模塊,用于在經(jīng)過預(yù)設(shè)周期之后,執(zhí)行所述監(jiān)控程序,對(duì)所述數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控。

本發(fā)明實(shí)施例所提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的裝置,通過調(diào)用第一編程函數(shù),自動(dòng)執(zhí)行預(yù)設(shè)結(jié)構(gòu)化查詢指令,得出執(zhí)行結(jié)果;根據(jù)上述執(zhí)行結(jié)果,判斷數(shù)據(jù)庫的主從同步狀態(tài)是否正常。利用編程手段,自動(dòng)執(zhí)行結(jié)構(gòu)化查詢指令,對(duì)數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控,相較于人工執(zhí)行結(jié)構(gòu)化查詢指令對(duì)數(shù)據(jù)庫的主從同步狀態(tài)進(jìn)行監(jiān)控,其自動(dòng)執(zhí)行結(jié)構(gòu)化查詢指令,使得數(shù)據(jù)庫的主從同步狀態(tài)的監(jiān)控效率較高,可見,該裝置有利于提高數(shù)據(jù)庫主從同步狀態(tài)的監(jiān)控效率。

本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其它實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同或相似部分互相參見即可。對(duì)于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對(duì)應(yīng),所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法部分說明即可。

專業(yè)人員還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。

結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動(dòng)磁盤、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。

以上對(duì)本發(fā)明所提供的數(shù)據(jù)庫主從同步狀態(tài)監(jiān)控的方法以及裝置進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
镇赉县| 思茅市| 江孜县| 罗江县| 博乐市| 沙河市| 图们市| 延吉市| 佛坪县| 日照市| 平塘县| 库尔勒市| 桑植县| 阿合奇县| 海安县| 陆良县| 卢氏县| 福清市| 虹口区| 涿州市| 佛教| 永胜县| 治县。| 阳曲县| 安龙县| 栾城县| 修水县| 曲水县| 东光县| 庆云县| 五大连池市| 丰城市| 宝清县| 林西县| 易门县| 瑞安市| 蓬莱市| 栾城县| 四平市| 西畴县| 临武县|