摘要:某地在用的场面监视融汇系统无法正常使用錄像回放功能,经过排查,确定功能异常的直接原因为备用数据库的权限数据异常,并通过进一步的技术分析,发现权限数据异常则源自主从数据库同步功能失效,文中对整个分析过程做了说明,并就此类情况给出了改进措施建议。
关键词:场监融汇系统;数据库同步;主键冲突;配置优化
中图分类号: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日 ;性别:男;民族:汉族;籍贯:云南永胜 ; 现任单位:中国民用航空西南地区空中交通管理局云南分局 ; 学历:硕士研究生