CN111026813A - 一种基于MySQL的高可用准实时数据同步方法 - Google Patents

一种基于MySQL的高可用准实时数据同步方法 Download PDF

Info

Publication number
CN111026813A
CN111026813A CN201911311470.9A CN201911311470A CN111026813A CN 111026813 A CN111026813 A CN 111026813A CN 201911311470 A CN201911311470 A CN 201911311470A CN 111026813 A CN111026813 A CN 111026813A
Authority
CN
China
Prior art keywords
mysql
distribution center
event
data distribution
binlog
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201911311470.9A
Other languages
English (en)
Inventor
崔云龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Unicloud Nanjing Digital Technology Co Ltd
Original Assignee
Unicloud Nanjing Digital Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Unicloud Nanjing Digital Technology Co Ltd filed Critical Unicloud Nanjing Digital Technology Co Ltd
Priority to CN201911311470.9A priority Critical patent/CN111026813A/zh
Publication of CN111026813A publication Critical patent/CN111026813A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • G06F16/275Synchronous replication

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明的一种基于MySQL的高可用准实时数据同步方法,涉及数据同步方法应用技术领域,包括步骤S1,在多台服务器上部署数据分发中心,并引入ETCD,实现分布式锁;S2,数据分发中心伪造一个“从库”向主库发送binlog dump指令;S3,主库接收到binlog dump指令后将binlog event源源不断的发送给数据分发中心;S4,数据分发中心的主线程解析binlog event,并保存在内存队列中,数据分发中心的工作线程读取对应队列事件,分发事件至RabbitMQ消息接收器中一个TOPIC类型的exchange中;S5,RabbitMQ消息接收器根据消息对应的routing key,将消息发送到指定的队列中。实现了一个较为完善的数据同步方案,具备高可用的性能,能够对MySQL字段进行完整解析,支持添加多个导出数据源,实现横向扩展发送到不同消息队列上进行业务处理。

Description

一种基于MySQL的高可用准实时数据同步方法
技术领域
本发明涉及数据同步方法应用技术领域,具体涉及一种基于MySQL的高可用准实时数据同步方法。
背景技术
当先,随着公司业务的不断发展,经常需要做一些数据同步或者数据变化监控的工作,比如:费用中心的订单数据需要同步到其他业务系统;业务数据需要同步到数据分析部门进行分析;数据库的数据需要同步到全文搜索引擎等,经常使用到的方法有保持双写,即更新数据同时,更新缓存,更新搜索,提交数据到其他业务线;通过定时任务扫表进行同步;引入消息队列,通过生产者和消费者来进行处理。
使用以上几种数据同步的方法虽然可以实现数据库的数据同步,但是方案中都存在有或多或少的弊端,比如无法保证双写成功,影响核心业务代码可读性,难以保证实时性。因此我们有必要针对现有技术的不足而提供一种基于MySQL的高可用准实时数据同步方法。
发明内容
为了克服现有技术中的不足,本发明的一种基于MySQL的高可用准实时数据同步方法,其具备高可用的性能,能够对MySQL字段进行完整解析,支持添加多个导出数据源。
为了实现上述目的,本发明的一种基于MySQL的高可用准实时数据同步方法,包括如下步骤:
S1,在多台服务器上部署数据分发中心,并引入ETCD,实现分布式锁;
S2,数据分发中心伪造一个“从库”向主库发送binlog dump指令;
S3,主库接收到binlog dump指令后将binlog event源源不断的发送给数据分发中心;
S4,数据分发中心的主线程解析binlog event,并保存在内存队列中,数据分发中心的工作线程读取对应队列事件,分发事件至RabbitMQ消息接收器中一个TOPIC类型的exchange中;
S5,RabbitMQ消息接收器根据消息对应的routing key,将消息发送到指定的队列中。
优选的,在S4中,数据分发中心主线程通过MySQL日志解析,将binlog event中的二进制文件解析并转换为JSON格式的数据。
优选的,数据分发中心主线程通过MySQL日志解析中只有一个主实例连接到MySQL解析Binary Log,其他的为备选实例。
优选的,若主实例节点宕机,则备选实例节点通过竞争获取到锁,连接到MySQL,保证服务继续使用,具体运行的步骤如下:
S401、尝试获取分布式锁;
S402、获取成功,则连接数据库,获取Binary log事件流;
S403、获取失败,则主线程等待5秒后,回到S401。
优选的,S5中,routing key生成规则为:database(数据库名).table(表名).action(对应动作,insert/update/delete),如果是分表,为了避免在RabbitMQ中添加多个绑定关系,routing key生成规则为:database(数据库名).{table(表名前缀)}.action(对应动作,insert/update/delete)。
本发明具有以下有益效果:
实现了一个较为完善的数据同步方案,它具备高可用的性能,能够对MySQL字段进行完整解析,支持添加多个导出数据源,实现横向扩展发送到不同消息队列上进行业务处理,对于不同业务,该方案还可提供顺序优先/性能优先两种不同的策略进行数据分发,有效解决了数据库双写无法保证成功以及数据同步实时性差的问题,为不同业务场景下的数据同步提供了一种新的高可用的方案。
附图说明
下面结合附图对本发明作进一步描写和阐述。
图1是一种基于MySQL的高可用准实时数据同步方法流程图。
图2是一种基于MySQL的高可用准实时数据同步中数据分发中心主线程通过MySQL日志解析流程图。
具体实施方式
下面将结合附图、通过对本发明的优选实施方式的描述,更加清楚、完整地阐述本发明的技术方案。
实施例
如图1所示,一种基于MySQL的高可用准实时数据同步方法,
S1,在多台服务器上部署数据分发中心,并引入ETCD,实现分布式锁,当数据分发中心出现宕机时,会造成服务不可用,因此为了保证数据分发中心的高可用,在多台服务器上部署数据分发中心,并引入ETCD,实现分布式锁,保证同时只有一个实例连接到MySQL解析Binary Log,其他的实例为备选。
S2,数据分发中心伪造一个“从库”向主库发送binlog dump指令,数据分发中心向master发送COM_REGISTER_SLAVE命令,带上“从库”的相关信息,向主库注册,接受主库的binlog event;
S3,主库接收到binlog dump指令后将binlog event源源不断的发送给数据分发中心;
S4,数据分发中心的主线程解析binlog event,并保存在内存队列中,数据分发中心的工作线程读取对应队列事件,分发事件至RabbitMQ消息接收器中一个TOPIC类型的exchange中,并且分发事件有两种发送策略,1.多个线程分发事件(不会严格按照SQL执行顺序),提高分发效率,保证性能,侧重于关注数据变化的场景,2.保证事件到达顺序,单线程发送事件,侧重于对准确性要求极高的场景。
S5,RabbitMQ消息接收器根据消息对应的routing key,exchange将消息发送到指定的队列中,exchang通过代码进行绑定并且指定routingkey。
作为本发明的一种技术优化方案,在S4中,数据分发中心主线程通过MySQL日志解析,将binlog event中的二进制文件解析并转换为JSON格式的数据。
通过采用上述技术方案,JSON是要结合Ajax(异步请求)使用的,在后端一般会将一个对象转换成JSON格式的数据之后返回给客户端。
作为本发明的一种技术优化方案,数据分发中心主线程通过MySQL日志解析中只有一个主实例连接到MySQL解析Binary Log,其他的为备选实例,若主实例节点宕机,则备选实例节点通过竞争获取到锁,连接到MySQL,保证服务继续使用,具体运行的步骤如下:S401、尝试获取分布式锁;S402、获取成功,则连接数据库,获取Binary log事件流;S403、获取失败,则主线程等待5秒后,回到S401。
通过采用上述技术方案,可以实现一个高可用的数据分发中心。
作为本发明的一种技术优化方案,S5中,routing key生成规则为:database(数据库名).table(表名).action(对应动作,insert/update/delete),如果是分表,为了避免在RabbitMQ中添加多个绑定关系,routing key生成规则为:database(数据库名).{table(表名前缀)}.action(对应动作,insert/update/delete)。
通过采用上述技术方案,比如数据库admin中orders分表为orders_1,orders_2,则对应的routing key为admin.{orders_}.action,设置入队规则的步骤基本如下:1、新建队列,比如all-users-binlog;2、在指定交换机中建立绑定关系。
本发明的工作原理为:通过一个类似于MySQL从库的中间件数据分发中心,它会向主库发送binlog dump指令,主库会将binlog event源源不断的发送给数据分发中心。数据分发中心的主线程来解析binlog事件,保存到内存队列中,工作线程读取对应队列事件,分发事件。数据分发中心以不同的分发策略将处理后的binlog事件发送到消息队列中,数据同步方接受相应消息,解析消息进行数据同步。
上述具体实施方式仅仅对本发明的优选实施方式进行描述,而并非对本发明的保护范围进行限定。在不脱离本发明设计构思和精神范畴的前提下,本领域的普通技术人员根据本发明所提供的文字描述、附图对本发明的技术方案所作出的各种变形、替代和改进,均应属于本发明的保护范畴。本发明的保护范围由权利要求确定。

Claims (5)

1.一种基于MySQL的高可用准实时数据同步方法,其特征在于,包括如下步骤:
S1,在多台服务器上部署数据分发中心,并引入ETCD,实现分布式锁;
S2,所述数据分发中心伪造一个“从库”向主库发送binlog dump指令;
S3,所述主库接收到binlog dump指令后将binlog event源源不断的发送给所述数据分发中心;
S4,所述数据分发中心的主线程解析binlog event,并保存在内存队列中,所述数据分发中心的工作线程读取对应队列事件,分发事件至RabbitMQ消息接收器中一个TOPIC类型的exchange中;
S5,所述RabbitMQ消息接收器根据消息对应的routing key,将消息发送到指定的队列中。
2.根据权利要求1所述的一种基于MySQL的高可用准实时数据同步方法,其特征在于:在所述S4中,所述数据分发中心主线程通过MySQL日志解析,将binlog event中的二进制文件解析并转换为JSON格式的数据。
3.根据权利要求2所述的一种基于MySQL的高可用准实时数据同步方法,其特征在于:所述数据分发中心主线程通过MySQL日志解析中只有一个主实例连接到MySQL解析BinaryLog,其他的为备选实例。
4.根据权利要求3所述的一种基于MySQL的高可用准实时数据同步方法,其特征在于:若所述主实例节点宕机,则备选实例节点通过竞争获取到锁,连接到MySQL,保证服务继续使用,具体运行的步骤如下:
S401、尝试获取分布式锁;
S402、获取成功,则连接数据库,获取Binary log事件流;
S403、获取失败,则主线程等待5秒后,回到S401。
5.根据权利要求1所述的一种基于MySQL的高可用准实时数据同步方法,其特征在于:所述S5中,所述routing key生成规则为:database(数据库名).table(表名).action(对应动作,insert/update/delete),如果是分表,为了避免在RabbitMQ中添加多个绑定关系,routing key生成规则为:database(数据库名).{table(表名前缀)}.action(对应动作,insert/update/delete)。
CN201911311470.9A 2019-12-18 2019-12-18 一种基于MySQL的高可用准实时数据同步方法 Pending CN111026813A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911311470.9A CN111026813A (zh) 2019-12-18 2019-12-18 一种基于MySQL的高可用准实时数据同步方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911311470.9A CN111026813A (zh) 2019-12-18 2019-12-18 一种基于MySQL的高可用准实时数据同步方法

Publications (1)

Publication Number Publication Date
CN111026813A true CN111026813A (zh) 2020-04-17

Family

ID=70210664

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911311470.9A Pending CN111026813A (zh) 2019-12-18 2019-12-18 一种基于MySQL的高可用准实时数据同步方法

Country Status (1)

Country Link
CN (1) CN111026813A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112162904A (zh) * 2020-09-25 2021-01-01 同程网络科技股份有限公司 订单变更过程整合方法、提取方法、整合装置和提取装置
CN112182001A (zh) * 2020-09-27 2021-01-05 浪潮云信息技术股份公司 数据库增量同步至动态es索引库的方法、装置和介质
CN112667440A (zh) * 2020-12-28 2021-04-16 紫光云技术有限公司 一种高可用MySQL的异地灾备方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108076098A (zh) * 2016-11-16 2018-05-25 北京京东尚科信息技术有限公司 一种业务处理方法及系统
CN108347477A (zh) * 2018-01-24 2018-07-31 广东欧珀移动通信有限公司 数据发送方法、装置以及服务器
CN109145060A (zh) * 2018-07-20 2019-01-04 腾讯科技(深圳)有限公司 数据处理方法及装置
CN110287273A (zh) * 2019-07-03 2019-09-27 成都路行通信息技术有限公司 基于监听MySQL数据库binlog变化实现数据同步的方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108076098A (zh) * 2016-11-16 2018-05-25 北京京东尚科信息技术有限公司 一种业务处理方法及系统
CN108347477A (zh) * 2018-01-24 2018-07-31 广东欧珀移动通信有限公司 数据发送方法、装置以及服务器
CN109145060A (zh) * 2018-07-20 2019-01-04 腾讯科技(深圳)有限公司 数据处理方法及装置
CN110287273A (zh) * 2019-07-03 2019-09-27 成都路行通信息技术有限公司 基于监听MySQL数据库binlog变化实现数据同步的方法和系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
WEIXIN_49055101: "基于MySQL的高可用准实时的数据同步方案", 《HTTPS://BLOG.CSDN.NET/WEIXIN_49055101/ARTICLE/DETAILS/107097724》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112162904A (zh) * 2020-09-25 2021-01-01 同程网络科技股份有限公司 订单变更过程整合方法、提取方法、整合装置和提取装置
CN112182001A (zh) * 2020-09-27 2021-01-05 浪潮云信息技术股份公司 数据库增量同步至动态es索引库的方法、装置和介质
CN112667440A (zh) * 2020-12-28 2021-04-16 紫光云技术有限公司 一种高可用MySQL的异地灾备方法

Similar Documents

Publication Publication Date Title
US10866967B2 (en) Multi-replica asynchronous table replication
CN110209726B (zh) 分布式数据库集群系统、数据同步方法及存储介质
CN111026813A (zh) 一种基于MySQL的高可用准实时数据同步方法
CN110502583B (zh) 分布式数据同步方法、装置、设备及可读存储介质
WO2016177285A1 (zh) 一种数据推送方法及装置
CN106874334B (zh) 一种数据处理方法及装置、资讯处理系统
US20140156586A1 (en) Big-fast data connector between in-memory database system and data warehouse system
CN104092767A (zh) 一种增加消息队列模型的发布/订阅系统及其工作方法
RU2003138081A (ru) Система и способ усовершенствованной синхронизации между сервером и клиентом
CN107181805B (zh) 一种在微服务架构下实现全局有序重演的方法
CN109462640B (zh) 一种元数据同步方法、数据端、交互系统及介质
CN103345502A (zh) 分布式数据库的事务处理方法和系统
CN104794190A (zh) 一种大数据有效存储的方法和装置
CN112445626A (zh) 一种基于消息中间件的数据处理方法和装置
CN107870982A (zh) 数据处理方法、系统和计算机可读存储介质
CN109120445B (zh) 一种网络日志数据同步系统及方法
CN107562803B (zh) 数据供应系统及方法、终端
CN104978313A (zh) 数据库系统的数据同步方法、装置及服务器
CN116382943A (zh) 顺序消息处理方法、总线系统、计算机设备及存储介质
CN111858747A (zh) 将MySQL数据库同步到Elasticsearch的方法
EP2025133B1 (en) Repository synchronization in a ranked repository cluster
CN113448757A (zh) 消息处理方法、装置、设备、存储介质和系统
CN113761052A (zh) 数据库同步方法和装置
US8230444B2 (en) Global attribute uniqueness (GAU) using an ordered message service (OMS)
CN105447000A (zh) 一种事务消息的传输方法和设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20200417

WD01 Invention patent application deemed withdrawn after publication