CN111026813A - 一种基于MySQL的高可用准实时数据同步方法 - Google Patents
一种基于MySQL的高可用准实时数据同步方法 Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous 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的高可用准实时数据同步方法,包括如下步骤:
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)。
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)
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)
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变化实现数据同步的方法和系统 |
-
2019
- 2019-12-18 CN CN201911311470.9A patent/CN111026813A/zh active Pending
Patent Citations (4)
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)
Title |
---|
WEIXIN_49055101: "基于MySQL的高可用准实时的数据同步方案", 《HTTPS://BLOG.CSDN.NET/WEIXIN_49055101/ARTICLE/DETAILS/107097724》 * |
Cited By (3)
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 |