本申请公开了一种数据备份方法及装置,用以解决现有技术中备份数据的速度较低、准确性较低的问题。该方法针对待处理事务,确定该待处理事务中包含的表标识及其对应的分库标识,判断当前是否存在与待处理事务冲突的已分配事务,若存在,则将待分配事务分配到冲突的已分配事务所在的等待队列中等待处理,否则,在各线程的等待队列中选择一个等待队列,并将该待分配事务分配到选择的等待队列中等待处理。由于上述方法是通过多个线程并行的处理互不冲突的多个事务,而且一个线程处理一个事务中包含的所有操作记录,因此可有效提高备库的备份速度,还可保证对同一事务中包含的所有操作记录处理的一致性,从而提高了备库处理事务的准确性。
【技术实现步骤摘要】
【专利摘要】本申请公开了一种数据备份方法及装置,用以解决现有技术中备份数据的速度较低、准确性较低的问题。该方法针对待处理事务,确定该待处理事务中包含的表标识及其对应的分库标识,判断当前是否存在与待处理事务冲突的已分配事务,若存在,则将待分配事务分配到冲突的已分配事务所在的等待队列中等待处理,否则,在各线程的等待队列中选择一个等待队列,并将该待分配事务分配到选择的等待队列中等待处理。由于上述方法是通过多个线程并行的处理互不冲突的多个事务,而且一个线程处理一个事务中包含的所有操作记录,因此可有效提高备库的备份速度,还可保证对同一事务中包含的所有操作记录处理的一致性,从而提高了备库处理事务的准确性。【专利说明】一种数据备份方法及装置
本申请涉及通信
,尤其涉及一种数据备份方法及装置。
技术介绍
MySQL是一种小型关系型数据库管理系统。一般的,MySQL包括主库和备库,主库用于提供数据管理和数据查询等功能,备库用于备份主库中的数据,用以在主库发生故障时代替主库提供相应的功能。 图1为现有技术中MySQL中的主库将自身的数据备份到备库的过程,具体包括以下步骤: SlOl:主库在对自身的数据进行操作时,生成对应的操作记录并记录在二进制日志(binlog)中。 其中,主库对自身的数据的操作包括:更新操作、插入操作、删除操作。 例如,主库将自身的数据A更新为数据B时,生成将该数据A更新为数据B的操作记录,并记录在binlog日志中。 S102:备库通过I/O线程读取主库保存的binlog日志。 S103:备库将读取到的binlog日志转换成中继日志(relay)。 其中,主库保存的binlog日志中记录的操作记录,与备库转换的relay日志中记录的操作记录相同,只是binlog日志与relay日志的格式不同。 继续沿用上例,由于主库的binlog日志中记录有将数据A更新为数据B的操作记录,因此备库转换的relay日志中也包含将数据A更新为数据B的操作记录。 S104:备库通过一个SQL线程依次读取relay日志中记录的每个操作记录。 继续沿用上例,备库读取到的操作记录即为将数据A更新为数据B的操作记录。 S105:备库根据读取到的操作记录,将该操作记录对应的数据读取到内存中,并根据该操作记录对内存中的该数据进行相应操作。 继续沿用上例,由于读取到的操作记录为将数据A更新为数据B的操作记录,因此该操作记录对应的数据即为备库中保存的数据A。备库则将该数据A读取到内存中,再将该操作记录(将数据A更新为数据B的操作记录)解析为相应的执行语句并执行,用以将内存中的该数据A更新为数据B,完成对主库数据的备份。 由上述图1所示的过程可以看出,备库在备份主库中的数据时,是通过一个SQL线程依次读取relay日志中的操作记录进行操作的,也即备库是通过一个SQL线程串行的执行relay日志中各操作记录对应的执行语句,实现数据的备份的。而在实际应用中,主库通常是通过多个线程并行的对保存的各数据进行操作的,例如主库可以同时通过几十个线程并行的对相应数量的数据进行操作,而备库在备份这些数据时,只能通过一个线程串行的备份这些数据,这就会导致备库对主库数据的备份速度远远落后于主库对自身保存的数据进行操作的速度。 为了提高备库对主库数据进行备份的速度,现有技术中主要有以下三种方法。 第一种,对于relay日志中任意两个事务,如果一个事务中包含的操作记录对应的数据在主库中所属的分库,不同于另一个事务中包含的操作记录对应的数据在主库中所属的分库,则备库通过两个线程并行的对这两个事务中包含的操作记录进行处理,以备份主库中这两个事务中包含的操作记录对应的数据。如果一个事务中包含的操作记录对应的数据在主库中所属的分库,与另一个事务中包含的操作记录对应的数据在主库中所属的分库相同,则备库仍然通过一个线程串行的对这两个事务中包含的操作记录进行处理,以备份主库中这些操作记录对应的数据。 其中,binlog日志和relay日志均是以事务的形式对操作记录进行记录的,一个事务中包含若干个操作记录,这若干个操作记录一般是用户在进行一个业务操作时,数据库根据这个业务操作对自身保存的数据所要做出的若干个操作所对应的若干个操作记录。并且,在binlog日志和relay日志中,每个事务均具有一个事务开始标记和事务结束标记。 例如,某用户有四个账号,分别为账号A、账号B、账号C、账号D,这四个账号中均有10000元,现该用户从账号A向账号B转入1000元,再从账号C向账号D转入1000元,那么主库中的binlog日志和备库中的relay日志则均会记录有两个事务。 第一个事务是从账号A向账号B转入1000元的事务,该第一个事务中包含的操作记录即为:将账号A的余额由10000元更新为9000元的操作记录,以及,将账号B的余额由10000元更新为11000元的操作记录,共2个操作记录。第二个事务是从账号C向账号D转入1000元的事务,该第二个事务中包含的操作记录即为:将账号C的余额由10000元更新为9000元的操作记录,以及,将账号D的余额由10000元更新为11000元的操作记录,也是2个操作记录。这两个事务在binlog日志和relay日志中分别具有各自的事务起始标记和事务结束标记,以区分不同事务中包含的操作记录。 如果上例中账号A的余额数据和账号B的余额数据属于主库中的分库1,账号C的余额数据和账号D的余额数据属于主库中的分库2,则备库在备份这4个数据时通过两个SQL线程进行并行的备份,一个线程用于根据第一个事务中包含的2个操作记录备份账号A的余额数据和账号B的余额数据,另一个线程用于根据第二个事务中包含的2个操作记录备份账号C的余额数据和账号D的余额数据。相反的,如果上例中账号A的余额数据和账号B的余额数据属于主库中的分库1,账号C的余额数据和账号D的余额数据也属于主库中的分库1,则备库仍然通过一个SQL线程串行的对这两个事务中包含的操作记录进行处理,以备份这4个数据。 但是,采用第一种方法时,由于主库中的分库的数量往往较少,一般只有2?3个,而第一种方法备库可以采用的并行线程的数量最多就是主库中的分库的数量,因此第一种方法并不能有效的提高备库对主库数据进行备份的速度。 第二种,对于relay日志中的任意两个操作记录,如果这两个操作记录对应的数据在主库中所属的数据表不同,则备库通过两个线程并行的对这两个操作记录进行处理。如果这两个操作记录对应的数据在主库中所属的数据表相同,则备库仍然通过一个线程串行的对这两个操作记录进行处理。 其中,主库中包含若干个数据表,每个数据表中包含若干个数据。 第三种,对于relay日志中任意两个操作记录,如果这两个操作记录对应的数据不同,则备库通过两个线程并行的对这两个操作记录进行处理。如果这两个操作记录对应的数据相同,则备库仍然通过一个线程串行的对这两个操作记录进行处理。 可见,第二种方法和第三种方法并不是一个线程处理一个事务中包含的所有操作记录,而是可能通过两个或多个线程分别处理一个事务中包含的操作记录。 例如,某用户有三个账号,分别为账号A、本文档来自技高网...
【技术保护点】
一种数据备份方法,其特征在于,包括:备库将relay日志中记录的未处理的事务作为待分配事务,针对待分配事务,确定所述待分配事务中包含的表标识以及表标识对应的分库标识;并根据所述待分配事务中包含的表标识及其对应的分库标识,以及各已分配事务中包含的表标识以及表标识对应的分库标识,判断是否存在与所述待分配事务冲突的已分配事务;若是,则将所述待分配事务分配到冲突的已分配事务所在的等待队列中等待处理,其中,已分配事务为已经分配到线程的等待队列中等待处理的事务;否则,在各线程的等待队列中选择一个等待队列,并将所述待分配事务分配到选择的等待队列中等待处理。
【技术特征摘要】
【专利技术属性】
技术研发人员:刘辉,翟卫祥,
申请(专利权)人:阿里巴巴集团控股有限公司,
类型:发明
国别省市:开曼群岛;KY
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。