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