打开网易新闻 查看更多图片

文 / 农信银资金清算中心 刘玉

MySQL数据库同步领域研究

将提升应急接管能力

为了落实国家“十四五”规划关于“提升金融科技水平”要求,进一步保障中小金融机构数据安全性,提升金融机构灾备系统建设能力和控制能力,满足应用机构的个性化需求,农信银中心充分结合应用机构灾备业务场景,着力提升灾备业务核心技术创新能力。本课题研究并设计开发了支持MySQL数据库同步软件平台,实现MySQL数据库间的数据同步。通过研制此软件,加大了技术自主可控水平,满足了应用机构应急托管需求,促进了应用机构灾备业务向良性方向发展。

MySQL数据库同步软件界面友好易操作,软件满足了高效同步、运行稳定、功能齐全的需求,自上线以来系统运行稳定。该软件满足全方位、多维度的同步需求,数据同步支持多种特性,有效降低用户使用门槛。该软件拥有完善的性能查询体系,同步软件可以提供实时同步数据条数、同步时延以及各种告警信息,可对性能进行实时监控。该软件支持同步数据过滤,用户可以对要同步的表设置某种条件过滤数据。该软件可以解决企业的定制化需求,与现有的业务流程匹配度更高。软件的灵活性高,更符合业务要求,能够更快地应对不断变动的业务需求。该软件解决了性能瓶颈、内存泄漏、不能实时同步等问题,各项性能指标满足应用机构需求。软件在不同场景下的源端、目标端数据处理能力、系统资源占用情况等指标均表现良好。

项目技术特点

1.高内聚低耦合设计。MySQL数据库同步软件,在设计之初就定位于不仅针对MySQL数据库。由于应用机构数据库使用范围广泛,如何将数据同步软件架构设计为易扩展的模式,成为最初关注的重点。MySQL数据库同步软件采用高内聚低耦合设计理念,软件共包含16个功能模块,将与数据库交互的功能部分独立为单独模块,以实现后续软件升级,可快速实现不同种类数据库的数据同步需求。MySQL数据库同步软件基础层部分为同步软件与数据库交互部分,此部分在不同数据库中交互方式不同,所以可以单独独立出来,比如MySQL数据库的交互方式为通过MySQL提供的mysqlbinlog接口读取事务日志的变化。从数据库获取到数据后,经过数据层和应用层程序处理,完成数据的分析、加工、打包、加密解密、传输等步骤,最终实现数据传输功能。

2.实现多种数据同步需求。MySQL数据库同步软件可以实现数据备份、数据双活、数据汇总、数据迁移等多种数据同步需求。数据备份和数据双活可以采用源端、目标端一对一的部署方式。随着现代企业的快速发展,数据资产越来越显示出其重要作用,将企业的重要数据实时地备份到同城中心或异地中心,是数据中心设计的重要内容。MySQL数据同步软件可以实现数据快速备份,保证企业数据安全。同时,随着金融业等行业的快速发展,需要对外提供不中断的服务,主数据中心中断后,需要备份数据中心快速接管业务,对外提供服务。双活数据中心的建设同样需要数据同步软件为其提供服务。MySQL数据同步软件采用源端、目标端独立部署方式,可为双活数据中心提供不中断的实时数据同步服务,并可以根据需求,在保证数据一致性的情况下,同时进行正向和反向的数据同步服务。

3.系统应用架构。MySQL数据同步软件通过MySQL提供的mysqlbinlog接口读取事务日志的变化,通过对日志内容的实时分析,分析出日志头、用户操作日志等内容,得到数据表字典结构,根据表结构记录的CHARACTER类型(包含CHAR、VARCHAR等)、NUMERIC类型(包含INTEGER、SMALLINT、BIGINT、DECIMAL、FLOAT等)、TIME类型(包含DATE、DATETIME等),获取日志中记录的数据内容。获取到的数据内容,再经过数据分析、转换、打包、加解密、压缩、解压缩、传输等操作,最终实现源端数据实时同步到目标端。MySQL数据库同步软件还支持同步状态的实时监控,MySQL数据库同步软件可以实时输出同步条数、同步延时、报错信息等内容,方便系统管理员实时了解同步状态,快速处理同步软件问题。同时,MySQL数据库同步软件支持大数据量的数据比对功能,可以进行全库全内容数据比对、单表全内容数据比对、单表条数比对、单表指定列数据比对、多表指定列数据比对等。

关键技术及创新点

1.全量数据获取。数据同步的第一步是获取全量数据内容。全量数据可以通过服务器、操作系统、数据库等不同层面的技术进行获取。其中数据库层面的全量数据获取方式又分为备份恢复方式和数据捕获方式。MySQL数据库同步软件采用的是数据库数据捕获的方式进行获取,其优点包括可对数据进行自定义的压缩,降低带宽消耗,提高异地灾备数据恢复的效率。同时通过此种方式获取数据,可灵活部署同步软件,数据同步软件可以部署在源端数据库,也可以部署到中间件,以降低同步软件对源端数据库的影响。全量数据获取可通过多线程提高数据获取效率,线程数量可以在配置文件中进行定义,最大线程数量不要大于同步表的最大个数。MySQL数据同步软件首先将需要同步的表由大到小进行排序,每个线程按照排序获取一个表进行并发分析,待一个表的数据获取完成后,空闲的线程再到链表中获取下一个待处理的数据表,由此循环往复进行。

2.全量数据获取中断后的续传。由于系统存量数据一般都比较大,全量数据获取时间一般都需要比较长的时间,时间跨度为几小时到几天不等。受到系统资源限制、网络异常中断、同步需求变化等情况影响,全量数据获取易发生计划内和计划外的中断情况。如果每次中断,都要重新进行全量数据获取,将严重影响工作效率,降低数据同步服务的时效性。MySQL数据库同步软件通过在源端设立登记文件,在全量数据获取期间,每处理完一张表,都会在登记文件中进行登记,此张表被标记为已处理完成状态。如果程序发生计划内或计划外终止,等到MySQL数据库同步软件再次启动时,程序会首先加载源端登记文件,已经记录为全量数据获取完成的表将被跳过,只处理那些还没有处理完成的表。同时,登记文件也可通过监控软件输出,方便系统管理员随时查看全量表的导出状态,以及每张表导出的条数和时间,便于系统管理员监控软件运行情况,计算同步软件运行效率。

3.增量数据获取。全量数据获取完成后,MySQL数据同步软件将进入到增量数据获取状态。增量数据的获取是获取数据库的事务日志并进行日志分析,得到数据库数据变化内容的过程。增量数量获取可分为日志获取和分析日志两部分内容。其中日志获取是通过MySQL提供的mysqlbinlog接口读取事务日志的变化。日志内容包括日志头和用户操作日志等内容。分析日志程序模块是在得到事务日志后,对日志进行分析、解析的过程。数据库数据变化主要记录在用户操作日志部分。MySQL数据库同步软件日志分析模块根据数据库不同的字段类型,包括CHARACTER类型、NUMERIC类型、TIME类型等,获取数据变化内容。增量数据获取包括日志获取和分析日志的并发。日志获取程序不断向外更新日志内容,分析日志线程负责分析输出的日志内容,得到增量数据变化内容。

4.增量数据获取中断后的续传。和全量数据一样,增量数据获取期间,受到系统资源限制、网络异常中断、同步需求变化等情况影响,增量数据获取同样易发生计划内和计划外的中断情况。增量数据获取中断后,如果不能进行续传,将严重影响数据同步软件的运行。因为增量数据获取是通过分析事务日志进行的,事务日志的超前分析和滞后分析,都会影响数据同步的数据一致性。而数据同步的数据一致性是数据同步软件的重要指标,是数据同步软件设计者和使用者最关心的内容之一,所以,及时记录增量数据分析位置十分重要。MySQL数据库同步软件的日志分析模块,在分析事务日志的过程中,以一个记录作为最小单位,每分析完一个记录,就会将该记录的地址登记在源端的登记文件中。当系统发生计划内或计划外的中断后,源端程序首先会加载源端的登记文件,取出记录的地址,再到事务日志中找到相应位置,继续进行日志的分析,由此完成增量数据获取的断点续传功能。

5.数据同步表的过滤机制。MySQL数据库同步软件通过MySQL提供的mysqlbinlog接口读取事务日志的变化。MySQL数据库同步软件不仅支持全库数据同步服务,还可以支持表级的数据同步服务,以及可根据具体需求,只复制某些表的某些列字段内容。而MySQL数据库的所有表的变化都将会记录日志内容,这就要求MySQL数据库同步软件制定筛选机制,过滤掉不需要的日志内容。比如,MySQL数据库同步软件在源端配置文件中可以设置同步的表清单,在分析日志模块时,首先进行表名等内容的分析,过滤掉不需要的日志内容。采用此种方式,一方面可使同步方式更加灵活,可根据用户的需求进行同步。另一方面,通过过滤无效日志,可进一步降低对长距离带宽的消耗,提高同步效率,节约灾备中心建设成本。

业务场景

MySQL数据库同步软件可以实现一库对一库、多库对一库、一库对多库数据同步等具体需求,通过数据同步可以帮助企业满足多种典型业务场景。

1.可实现同城/异地灾备需求。MySQL数据库同步软件在同城/异地灾备中心使用,是其最重要的应用场景。现在企业在发展过程中,数据资产的作用越来越被人们重视。数据资产包括客户信息、交易信息、资金使用信息等内容。当受到地震、台风、火山爆发等突发事件影响,单一的数据中心并不能保证数据资产的安全性。一些企业采用定期备份的方式,对数据进行定期维护整理。金融业等重要基础设施行业,为了数据安全,需要实时地将数据进行备份,这就需要采用实时数据同步软件。本次课题研究的MySQL数据库同步软件通过高内聚低耦合的架构设计、采用增量日志获取方式,极大提升了软件同步效率。用户可以在主数据中心服务器或者中间上部署源端数据同步程序,在灾备中心服务器上部署目标端数据同步程序。应用在主数据中心数据库完成数据写入后,MySQL数据同步软件源端程序对生产日志进行实时分析,将数据变化传送到灾备中心,目标端程序写入到灾备中心数据库中,完成生产数据的备份。

2.可实现数据汇总需求。随着金融业等行业数据量的与日俱增,生产数据库被拆分为多个数据库以减少对主生产数据库的访问压力。拆分后的生产数据库以负载均衡的方式,承担交易的访问请求。但生产数据作为企业的重要资产,需要将其导入数据仓库进行加工处理。MySQL数据同步软件可以实现各数据库数据汇总的需求,将各数据库的数据汇总到指定数据库,为大数据分析提供数据源。如图1所示,可在“生产数据库1”“生产数据库2”“生产数据库3”分别部署MySQL数据同步源端程序,各源端程序独立运行,分析生产日志内容。在汇总数据库部署MySQL数据同步目标端程序,将“生产数据库1”“生产数据库2”“生产数据库3”的数据变化内容写入到目标端数据库中,完成生产数据的汇总。如果需要在汇总数据库标记出数据源是哪个数据库,需要在“生产数据库1”“生产数据库2”“生产数据库3”的数据表中设计标记字段,数据同步软件可将标记字段写入汇总数据库,完成数据源的区分。同时,MySQL数据同步软件不仅支持同构数据库间的数据汇总,也支持通过KAFKA消息队列,直接写入到大数据平台。数据同步软件目标端程序将源端解析后的数据,按照KAFKA消息队列的格式进行传输,为大数据平台提供数据源。

打开网易新闻 查看更多图片
图1 数据同步实现数据汇总

3.可实现数据分发需求。设计多数据中心时,如何将参数进行实时分发是多数据中心设计的重要需求内容。MySQL数据同步软件支持将源端数据库的参数配置信息,实时同步到各个数据库中。如图2所示,可在“生产数据库1”中部署MySQL数据库同步软件源端程序,源端程序实时分析数据库事务日志,当“生产数据库1”有数据变化时,数据同步软件源端程序可快速捕获变化内容并将其打包发送。在“生产数据库2”和汇总数据库分别部署MySQL数据同步软件目标端程序,目标端程序可在两台数据库中独立运行。目标端程序接收到源端程序发送的数据内容后,分别写入到“生产数据库2”和汇总数据库中。通过此种部署方式,可以实现参数信息在不同数据中心间的同步更新,可以将数据层的数据配置、转换需求交给数据同步软件完成,应用程序专注于交易层需求的设计开发。

打开网易新闻 查看更多图片
图2 数据同步实现数据分发

(此文刊发于《金融电子化》2024年9月上半月刊)