基于Mysql数据库和SQL日志的跨国数据同步方法与流程

文档序号:12470392阅读:721来源:国知局
基于Mysql数据库和SQL日志的跨国数据同步方法与流程

本发明涉及数据同步领域,尤其涉及基于Mysql数据库和SQL日志的跨国数据同步方法。



背景技术:

在化工行业,经常有国际贸易发生,跨国的B2B电商平台可支撑这些贸易服务。平台要求在全球地区都能快速的访问,同时用户和账单等数据能及时同步更新。

在目前跨国网络状况不佳的情况下,使用Mysql自有的数据库同步方法,会因为网络不稳定而中断或者出现数据冲突错误。也会因为网络的延时导致数据重复错误,没有完善的日志可以分析排错。Mysql多主同步只能跳过当前的语句,导致手动修复麻烦,而且无法在第一时间进行报警。

因此,需要提供一个跨国数据同步方法,来解决多个国家跨机房数据同步问题。



技术实现要素:

本发明的目的是为了解决现有技术的不足,提供一种基于Mysql数据库和SQL日志的跨国数据同步方法。

本发明的目的是通过以下技术方案实现的:

一种基于Mysql数据库和SQL日志的跨国数据同步方法,包括:

(1)以每个国家作为结点,在每个国家结点,建立日志主数据库,通过Mysql主从配置,建立其他国家的日志从数据库;

(2)PHP调用mysqlbinlog命令,实时读取和解析每个国家结点网站数据库产生的binlog日志,并进行参数解码和参数定位,实时提取出binlog日志中的SQL语句和执行环境参数,写入日志主数据库;

(3)每个国家将日志主数据库中的数据,通过Mysql主从配置,分发同步到其他国家建立的日志从数据库中;

(4)在每个国家结点,都启动写入进程,将其他国家结点同步过来的SQL语句和执行环境参数,通过日志从数据库,同步写入到该国网站数据库中,实现不同国家间网站数据库的同步。

上述的基于Mysql数据库和SQL日志的跨国数据同步方法,其中,所述步骤(3)还包括:通过grep命令,对网站产生的日志文件进行过滤,提取出SQL语句和执行环境参数。

上述的基于Mysq1数据库和SQL日志的跨国数据同步方法,其中,所述步骤(3)还包括:将日志从数据库中的SQL语句,同步写入网站数据库的过程中,将SQL语句的第一个单词,修改为相邻字母大小写结合后,再进行执行。

上述的基于Mysq1数据库和SQL日志的跨国数据同步方法,其中,对每个日志主数据库、日志从数据库设置单独的监控程序,监测同步程序是否出错中断,若发现中断,则监控程序调用第三方短信接口,第一时间给维护人员发送短信报警。

上述的基于Mysql数据库和SQL日志的跨国数据同步方法,其中,设计日志提取程序和同步写入程序,每一步操作都记录当前处理的结点,当程序被意外终止时,重新开启,从上次记录的结点继续执行。

上述的基于Mysql数据库和SQL日志的跨国数据同步方法,其中,对每条SQL日志记录执行状态,可以通过手动更改状态,批量跳过错误的重复数据执行。

上述的基于Mysql数据库和SQL日志的跨国数据同步方法,其中,将日志从数据库中的SQL写入网站数据库时,当启动写入进程时,记录当前的进程id,保存在日志从数据库中,进程在运行时,每执行一次写入操作都判断一下当前进程的id是否和数据从数据库中的id一致。

上述的基于Mysql数据库和SQL日志的跨国数据同步方法,其中,当另一个进程被同时启动时,日志从数据库中的进程id被新进程id覆盖,前一个进程自动终止。

综上所述,本发明解决了多个国家跨机房数据同步的问题,将网站产生的SQL日志,分发同步到其他国家结点,写入各结点的网站数据库中,实现数据同步。在网络稳定的情况下,可以达到秒级实时同步的要求。

在网络不稳定或者中断的情况,数据同步服务不会出错,等待网络恢复,可以自动恢复同步。当数据出现重复错误时,有完善的执行日志可以查看分析,通过判断,可以灵活跳过部分错误数据,恢复同步,方便手动修复,保证数据的准确性和一致性。基于这样稳定的同步方式,可以实现每个国家都从本国访问数据源,达到了一个很好的访问速度。

附图说明

图1是本发明的SQL日志在各个国家结点传输的示意图。

图2是本发明实施例2中中国和美国的数据同步的原理图。

具体实施方式

本发明以每个国家作为结点,建立网站主数据库和web服务,提供国家的本地访问服务。

实施例1

请参见图1,在每个国家结点,建立日志主数据库,通过Mysql主从配置,建立其他国家的日志从数据库,每个国家将SQL日志分发同步到其他国家建立的日志从数据库中。

PHP调用mysqlbinlog命令,实时读取和解析每个国家结点的网站主数据库产生的binlog日志,通过mysqlbinlog命令的参数(--base64-output=decode-rows--set-charset=utf8)进行参数解码,通过(--start-position)进行参数定位、读取位置,通过grep命令进行过滤,实时提取出binlog日志中的SQL语句和相关执行环境参数。

对解析出来的SQL的语句和执行环境参数,进行格式化,写入日志主数据库中,分别得到字段:log_file_id(日志文件名称)、at_id(SQL日志的id序列)、sql_time(SQL日志实际写入的时间)、insert_id(插入后,产生的自增id)、sql(SQL日志的内容)、sql_head(SQL日志的起始命令,类似:create,insert,update...)、write_server_id(用于写入同步时,记录写入的主库id)、write_time(用于写入同步时,记录同步写入时间)。

将各结点的日志主数据库中的数据,通过Mysql主从配置,分发同步到其他国家结点建立的日志从数据库中,在每个国家结点,都启动写入进程,将其他国家结点同步过来的SQL语句和执行环境参数,执行写入到网站数据库中,实现各国结点网站数据库的同步。

为了防止在同步过程中,SQL语句被重复分发,导致重复写入,同步进入死循环。需要在执行同步写入时,将SQL语句的第一个单词,按相邻字母大小写结合的规则,变换后再执行,例如:将“UPDATE ecm_groupbuy SET state=′1′WHERE state=′0′”变换为“uPdAtE ecm_groupbuy SET state=′1′WHERE state=′0′”再进行执行。这样变换后,提取程序在提取日志文件中的SQL语句时,如果判断到SQL语句的第一个单词,是按相邻字母大小写结合的,则忽略不再分发,解决了重复分发的问题。

通过设置mysql参数(auto_increment_offset和auto_increment_increment),解决了自增id重复的问题。

对每个日志主数据库、日志从数据库设置单独的监控程序,监测同步程序是否出错中断,一旦发现中断,监控程序调用第三方短信接口,第一时间给维护人员发送短信报警。

在程序中断过程中,各国家结点日志主数据库中唯一索引的字段,可能会产生重复数据,出现这种情况时,在发送报警短信的同时,还可进行手动处理。

设计日志提取程序和同步写入程序,每一步操作都记录当前处理的结点,当程序被意外终止时,能够重新开启时,可以从上次记录的结点继续执行,不产生数据错乱,保证数据的完整性。

对每条SQL日志记录执行状态,可以通过手动更改状态,批量跳过错误的重复数据执行。

在进行手动维护时,可以查看日志从库中的数据,分析执行情况,再判断哪些语句可以跳过,哪些语句需要重复执行,只要修改(write_server_id、write_time)字段便可批量执行。

若因为操作错误,同时启动多个程序,在这种情况下,如果不做控制,会导致数据重复读取或者写入,造成数据错误,因此要有避免多启的机制,保证任何时候只有独立的进程在运行。

为保证总是只有独立的进程在运行,每次进程在启动时,在数据库中记录当前进程的id。进程在运行时,每执行一次操作都判断数据库中的进程id是否和自身id一致,如果不一致则自主终止当前进程。当另外一个进程被同时启动时,数据库中的进程id被新进程id覆盖,导致之前启动的进程id与数据库不一致,前一个进程自动终止。保证了每时每刻都保留最新的一个进程独立运行。

实施例2

请参见图2,中国的网站数据库产生的日志文件同步到美国的网站数据库,其具体方法包括:

通过解析中国的网站数据库产生的日志文件,获取SQL语句和执行环境参数,写入日志主数据库中。通过Mysql主从配置,分发同步到在美国建立的日志从数据库中,在美国的网站数据库启动写入程序,将日志从数据库中的SQL语句和执行环境参数,同步写入到美国的网站数据库中。中国的网站数据库实时同步到美国的网站数据库。

综上所述,本发明解决了多个国家跨机房数据同步的问题,通过将网站产生的SQL日志,分发同步到其他国家结点,写入各结点的网站数据库中,实现数据同步。在网络稳定的情况下,可以达到秒级实时同步的要求。

在网络不稳定或者中断的情况,数据同步服务不会出错,等待网络恢复,可以自动恢复同步。当数据出现重复错误时,有完善的执行日志可以查看分析,通过判断,可以灵活跳过部分错误数据,恢复同步,方便手动修复,保证数据的准确性和一致性。基于这样稳定的同步方式,可以实现每个国家都从本国访问数据源,达到了一个很好的访问速度。

以上所述的实施例仅用于说明本发明的技术思想及特点,其目的在于使本领域内的技术人员能够了解本发明的内容并据以实施,不能仅以本实施例来限定本发明的专利范围,即凡依本发明所揭示的精神所作的同等变化或修饰,仍落在本发明的专利范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1