摘要:某地在用的場(chǎng)面監(jiān)視融匯系統(tǒng)無(wú)法正常使用錄像回放功能,經(jīng)過(guò)排查,確定功能異常的直接原因?yàn)閭溆脭?shù)據(jù)庫(kù)的權(quán)限數(shù)據(jù)異常,并通過(guò)進(jìn)一步的技術(shù)分析,發(fā)現(xiàn)權(quán)限數(shù)據(jù)異常則源自主從數(shù)據(jù)庫(kù)同步功能失效,文中對(duì)整個(gè)分析過(guò)程做了說(shuō)明,并就此類情況給出了改進(jìn)措施建議。
關(guān)鍵詞:場(chǎng)監(jiān)融匯系統(tǒng);數(shù)據(jù)庫(kù)同步;主鍵沖突;配置優(yōu)化
中圖分類號(hào):TP311.13?文獻(xiàn)標(biāo)識(shí)碼:A?文章編號(hào):1672-9129(2020)10-0035-01
1?引言
場(chǎng)監(jiān)融匯系統(tǒng)是空中交通管理部門(mén)在管制工作中用到的一套重要系統(tǒng),可以實(shí)現(xiàn)監(jiān)視、控制和路徑規(guī)劃功能[1],通過(guò)對(duì)監(jiān)視源數(shù)據(jù)的融匯和處理,為管制單位提供更加完整及時(shí)的機(jī)場(chǎng)場(chǎng)面運(yùn)行態(tài)勢(shì),提高機(jī)場(chǎng)交通運(yùn)行效率。
2020年7月,某地在用場(chǎng)面監(jiān)視融匯系統(tǒng)無(wú)法使用錄像回放功能,按鈕被置為灰色無(wú)法選中,在此之前功能使用正常。從監(jiān)控系統(tǒng)初步確認(rèn)各進(jìn)程狀態(tài)正常,系統(tǒng)無(wú)告警信息。
通過(guò)對(duì)系統(tǒng)數(shù)據(jù)庫(kù)運(yùn)行狀態(tài)的排查,找到了回放功能異常的直接原因?yàn)闄?quán)限數(shù)據(jù)不正確,并結(jié)合MySQL數(shù)據(jù)庫(kù)主從同步的機(jī)制原理,進(jìn)一步分析出權(quán)限數(shù)據(jù)的不正確源于數(shù)據(jù)庫(kù)主從同步未能成功執(zhí)行,并在最后給出了相應(yīng)的改進(jìn)措施。
2?技術(shù)分析過(guò)程
2.1故障初步定位。根據(jù)進(jìn)一步測(cè)試,系統(tǒng)其他各功能使用正常,但數(shù)據(jù)庫(kù)進(jìn)行過(guò)自動(dòng)切換。因錄像回放功能的異常不是出現(xiàn)在回放執(zhí)行過(guò)程中,而是功能無(wú)法選擇,故進(jìn)一步將問(wèn)題定位在MySQL數(shù)據(jù)庫(kù)中涉及用戶權(quán)限的部分?jǐn)?shù)據(jù)異常。
場(chǎng)監(jiān)融匯系統(tǒng)由多個(gè)服務(wù)器來(lái)實(shí)現(xiàn)各方面的功能,包括監(jiān)視數(shù)據(jù)前端處理器(SDFP)、監(jiān)視數(shù)據(jù)處理器(MSDP)、告警處理和路徑規(guī)劃服務(wù)器(ALM)、飛行數(shù)據(jù)處理器(FDP)、數(shù)據(jù)記錄和回放(DRP)、數(shù)據(jù)通信服務(wù)器(DIO)等[2]。其中MySQL數(shù)據(jù)庫(kù)就包含在飛行數(shù)據(jù)處理器(FDP)中。所以,對(duì)MySQL數(shù)據(jù)庫(kù)的進(jìn)一步檢查就定位到了FDP的服務(wù)器中。
2.2 MySQL主從數(shù)據(jù)庫(kù)同步機(jī)制介紹。MySQL數(shù)據(jù)庫(kù)配置為主從數(shù)據(jù)庫(kù)后,可以分為兩個(gè)角色,一臺(tái)服務(wù)器作為Master主服務(wù)器,接收實(shí)際的數(shù)據(jù)信息來(lái)源。Slave從服務(wù)器則由另外一臺(tái)服務(wù)器負(fù)責(zé),保持與主服務(wù)器的通信,并復(fù)制主服務(wù)器上的數(shù)據(jù)執(zhí)行動(dòng)作[3]。一個(gè)完整的同步過(guò)程如下所述:
(1)從服務(wù)器向主服務(wù)器發(fā)送讀寫(xiě)線程(IO線程)連接請(qǐng)求,并包含需要的文件內(nèi)容名稱和相應(yīng)的位置信息。
(2)主服務(wù)器收到來(lái)自從服務(wù)器的讀寫(xiě)線程請(qǐng)求后,按照請(qǐng)求給從服務(wù)器發(fā)送相應(yīng)內(nèi)容(在此例中為mysql_log.*)。
(3)當(dāng)從服務(wù)器的讀寫(xiě)線程收到主服務(wù)器發(fā)送的文件內(nèi)容后,會(huì)將數(shù)據(jù)寫(xiě)入自身的中繼日志文件中(在此例中為FDP2-relay-bin.xxxxxx)。
(4)從服務(wù)器端的數(shù)據(jù)庫(kù)線程(SQL線程)會(huì)持續(xù)的檢測(cè)本地對(duì)應(yīng)日志文件是否發(fā)生變化,如果有新增加的內(nèi)容,則在從服務(wù)器上按照SQL規(guī)則執(zhí)行語(yǔ)句。
上述四個(gè)步驟完畢,就可以將主服務(wù)器端執(zhí)行過(guò)的SQL語(yǔ)句在從服務(wù)器上再次執(zhí)行,以此達(dá)到了主從數(shù)據(jù)庫(kù)的數(shù)據(jù)同步功能。
2.3場(chǎng)監(jiān)融匯系統(tǒng)主從數(shù)據(jù)庫(kù)同步情況。
(1)系統(tǒng)同步機(jī)制介紹。在正常情況下,場(chǎng)監(jiān)融匯系統(tǒng)的FDP1服務(wù)器中的MySQL數(shù)據(jù)庫(kù)作為主用,F(xiàn)DP2服務(wù)器中的MySQL數(shù)據(jù)庫(kù)作為備用,且FDP2的數(shù)據(jù)庫(kù)通過(guò)主從數(shù)據(jù)庫(kù)IO線程將FDP1的數(shù)據(jù)庫(kù)SQL語(yǔ)句執(zhí)行記錄日志mysql_log.*復(fù)制到自己的本地FDP2-relay-bin.*文件中,并通過(guò)同步線程執(zhí)行FDP2-relay-bin.*中的SQL語(yǔ)句,將FDP1對(duì)數(shù)據(jù)庫(kù)的所有操作在FDP2本地的數(shù)據(jù)庫(kù)中也同樣執(zhí)行一遍,這樣既可以實(shí)現(xiàn)與FDP1數(shù)據(jù)庫(kù)的同步效果。
(2)備用數(shù)據(jù)庫(kù)日志文件跟蹤。通過(guò)對(duì)FDP2服務(wù)器中分區(qū)的存儲(chǔ)文件排查,發(fā)現(xiàn)目錄下有多個(gè)中繼日志文件FDP2-relay-bin.*,排查到此,可以確定FDP2服務(wù)器未成功執(zhí)行中繼日志文件,并持續(xù)積壓在服務(wù)器中。
(3)關(guān)鍵進(jìn)程狀態(tài)分析。FDP2服務(wù)器的數(shù)據(jù)庫(kù)中有兩個(gè)關(guān)鍵的進(jìn)程,一個(gè)是Slave_SQL_Runnin進(jìn)程,一個(gè)是Slave_IO_Running進(jìn)程,一個(gè)負(fù)責(zé)與主機(jī)的IO通信,一個(gè)負(fù)責(zé)FDP2自己的mysql進(jìn)程,有一個(gè)不正常都會(huì)導(dǎo)致數(shù)據(jù)同步異常。
進(jìn)一步查看FDP2服務(wù)器中MySQL數(shù)據(jù)庫(kù)的同步狀態(tài)(如圖1所示)發(fā)現(xiàn),Slave_IO_Running和Slave_SQL_Running兩個(gè)關(guān)鍵進(jìn)程的狀態(tài)都為No(正常狀態(tài)為Yes),Last _Error顯示錯(cuò)誤代碼為“1062”,查詢MySQL錯(cuò)誤代碼集發(fā)現(xiàn),此異常是指同步線程在做SQL語(yǔ)句插入數(shù)據(jù)庫(kù)操作的時(shí)候,重復(fù)執(zhí)行了相同的SQL語(yǔ)句引起主鍵沖突,導(dǎo)致同步線程卡住且不會(huì)繼續(xù)對(duì)后面的日志進(jìn)行同步。
未被執(zhí)行同步操作的日志屬于未過(guò)期的日志,MySQL數(shù)據(jù)庫(kù)不會(huì)對(duì)其進(jìn)行清除,所以同步日志一直堆積。之后因本地分區(qū)沒(méi)有足夠容量,同步IO線程無(wú)法正常將FDP1的MySQL日志信息復(fù)制到FDP2服務(wù)器的數(shù)據(jù)庫(kù)中,從而引起Slave_IO_Running狀態(tài)異常。
上述異常導(dǎo)致FDP2的數(shù)據(jù)庫(kù)內(nèi)容未與FDP1的數(shù)據(jù)庫(kù)內(nèi)容完全同步,其中涉及用戶權(quán)限部分的數(shù)據(jù)不一致導(dǎo)致系統(tǒng)自動(dòng)切換到備用數(shù)據(jù)庫(kù)后,用戶沒(méi)有錄像回放的權(quán)限。
3.?后續(xù)改進(jìn)措施
3.1同步執(zhí)行方面。MySQL數(shù)據(jù)庫(kù)在做主從數(shù)據(jù)庫(kù)復(fù)制時(shí),由于多種可能的原因,可能會(huì)遇到SQL語(yǔ)句執(zhí)行不成功的情況,此時(shí)服務(wù)器不會(huì)再繼續(xù)同步 [4]。但部分錯(cuò)誤是用戶可以忽略的,為了不影響后續(xù)語(yǔ)句的正常執(zhí)行,數(shù)據(jù)庫(kù)提供了slave-skip-errors配置選項(xiàng),用來(lái)跳過(guò)已知的可忽略的錯(cuò)誤情況,然后繼續(xù)執(zhí)行后續(xù)動(dòng)作。
根據(jù)上述的分析,異常原因?yàn)椤爸麈I沖突”, MySQL錯(cuò)誤代碼“1062”即對(duì)應(yīng)“主鍵沖突”錯(cuò)誤,隨后在/usr目錄下的my.cnf配置文件中增加slave-skip-errors=1062配置項(xiàng),防止重復(fù)插入數(shù)據(jù)造成SQL數(shù)據(jù)主鍵沖突,防止再次因同樣的原因出現(xiàn)數(shù)據(jù)庫(kù)同步進(jìn)程卡死的問(wèn)題。
3.2數(shù)據(jù)保存方面。即使我們進(jìn)行了數(shù)據(jù)庫(kù)配置優(yōu)化等操作,避免了目前已知問(wèn)題導(dǎo)致的數(shù)據(jù)庫(kù)同步問(wèn)題,但數(shù)據(jù)庫(kù)的同步可能遇到的異常情況種類很多,除了上述的配置優(yōu)化以外,我們還需要在工作中根據(jù)維護(hù)工作開(kāi)展情況,對(duì)數(shù)據(jù)庫(kù)備份工作進(jìn)行動(dòng)態(tài)調(diào)整,特別是針對(duì)一些重大的參數(shù)更新等場(chǎng)景,應(yīng)該有針對(duì)性的對(duì)數(shù)據(jù)庫(kù)進(jìn)行備份,最大程度減少數(shù)據(jù)異常帶來(lái)的不正常情況。
參考文獻(xiàn):
[1]高級(jí)場(chǎng)面活動(dòng)引導(dǎo)與控制自動(dòng)化系統(tǒng)技術(shù)要求.中華人民共和國(guó)民用航空行業(yè)標(biāo)準(zhǔn). MH/T 4042-2014.
[2] A-SMGCS維護(hù)手冊(cè).
[3]何小川. MySQL數(shù)據(jù)庫(kù)主從復(fù)制的實(shí)現(xiàn)[J].廣東通信技術(shù),2017,37(10):54-56.
[4]周起如,陳宇收.MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)復(fù)制方案研究[J].電腦編程技巧與維護(hù)術(shù),2018,11):84-85.
作者簡(jiǎn)介:李建松;出生年月日:1986年8月13日 ;性別:男;民族:漢族;籍貫:云南永勝 ; 現(xiàn)任單位:中國(guó)民用航空西南地區(qū)空中交通管理局云南分局 ; 學(xué)歷:碩士研究生