`
yunfuby126
  • 浏览: 6420 次
  • 性别: Icon_minigender_2
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

mydumper并行流备份调研

阅读更多
目的
         由于mysqldump工具是单线程备份,从备份效率来看,执行时间较长,效率非常低;从后续恢复使用来看,表级别的恢复需要使用专门的工具对数据拆分,工作量较大。第三方工具mydumper提供了并发备份功能,备份效率有很大提高,并且按照单表进行备份,表恢复工作方便。然而现有备份环境需要通过流方式,直接备份到备份服务器上,在本地不保留备份数据,而mydumper不支持流模式备份,基于该问题,对mydumper的源码进行分析和研究。
研究内容
问题1
mydumper在备份时,会不断读写metadata文件,该文件中存储了dump的操作时间信息。该文件的位置依赖于输入参数outputdir,即依赖于备份路径。如果使用流模式备份的话,会导致无法打开metadata而备份终止。
         具体细节参考代码部分,如下所示:

void start_dump(MYSQL *conn)
{
         ……
         if (daemon_mode)
                   p= g_strdup_printf("%s/%d/metadata", output_directory, dump_number);
         else
                   p= g_strdup_printf("%s/metadata", output_directory);
         FILE* mdfile=g_fopen(p,"w");

         为了去除mydumper备份对metadata的依赖,增加一个metadatadir参数,将metadata文件单独存放,这样数据文件的流备份就不会受到影响。基于这个思路,在输入选项中增加metadatadir参数,指定metadata的路径。
         修改代码如下所示:
1、增加metadata_directory变量

gchar *output_directory= NULL;
gchar * metadata_directory = NULL;

2、增加metadatadir参数

{ "outputdir", 'o', 0, G_OPTION_ARG_FILENAME, &output_directory, "Directory to output files to",  NULL },
{ "metadatadir", 'o', 0, G_OPTION_ARG_FILENAME, &metadata_directory, "Directory to metadata files to",  NULL },
{ "statement-size", 's', 0, G_OPTION_ARG_INT, &statement_size, "Attempted size of INSERT statement in bytes, default 1000000", NULL},

3、修改metadata文件完整文件名

void start_dump(MYSQL *conn)
{
         ……
         if (daemon_mode)
                   p= g_strdup_printf("%s/%d/metadata", metadata_directory, dump_number);
         else
                   p= g_strdup_printf("%s/metadata", metadata_directory);
         FILE* mdfile=g_fopen(p,"w");

         通过以上修改,将备份数据文件对metadata的依赖消除。
问题2
         mydumper是并行备份的,备份过程中,如何处理并发流向目的服务器,是一个难点。由于xtrabackup备份支持并行备份,且支持流备份。因此,基于这个思路,对xtrabackup的源码实现进行分析。
         源码分析发现,xtrabackup的并发处理只针对本地化存储,没有并发流备份到目的服务器的过程。如果是mydumper支持并发流处理,需要对mydumper的读写策略进行较大的修改,使其支持并发备份、压缩以数据流的方式传到服务器端。
从技术角度来说,通过查看相关资料,并发流处理是一个相对困难的问题。为了解决该问题,有两种思路:
1、建立网络通信,通过socket并行传输的方式实现将压缩后的数据并发备份到目的服务器。该方法从实现角度,需要在目的服务器编写客户端程序,用于接收和存储数据备份。而在实际应用工作中,往往直接调用hadoop来实现数据备份的传输。因此该思路更通用,但是在当前工作场景中,不适合。
         2、调用hadoop的系统命令,将压缩后的备份数据并发备份到目的服务器。该方法仅适合通过hadoop实现数据备份传输的场景。
         mydumper并行备份的并发流向目的服务器问题的解决采用第二种思路进行。通过改造,实现mydumper取代mysqldump逻辑备份,适合当前备份场景,提高备份和恢复的效率,减少备份和恢复的时间。
结论
         通过调研mydumper源码,针对存在的两个问题进行分析和探索。其中对第一个问题解决较简单,通过修改metadata路径,可以解除依赖关系。而对于第二个问题,经调研xtrabackup的并行处理只针对本地处理,不能满足当前应用场景,基于分析和研究,有两种解决思路,最终选择适合当前应用场景,通过调用hadoop系统命令的方式,解决mydumper的并行流备份问题。
         以上调研工作,仅代表个人观点和思路,欢迎相关专业人员交流和支持,解决mydumper的并行流备份问题。
分享到:
评论

相关推荐

    Java8并行流中自定义线程池操作示例

    主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧,需要的朋友可以参考下

    MyDumper-Tool:基于MyDumper将文件备份到S3

    MyDumper-Tool基于 mydumper 开发,并行上传 MySQL 数据库备份文件到公有云对象存储上由于 mydumper 只支持备份到本地,所以该工具以并行的方式将本地备份的文件一个个不间断上传到对象存储在减小本地存储空间消耗的...

    04.第四节-串行流与并行流实现的区别.mp4

    Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

    开启Java8并行流,算法时间大幅提升.docx

    什么是并行流: 并行流就是将一个流的内容分成多个数据块,并用不同的线程分别处理每个不同数据块的流。例如有这么一个需求: 有一个 List 集合,而 list 中每个 apple 对象只有重量,我们也知道 apple 的单价是 5...

    并行文件系统调研报告

    业界主流并行文件系统调查研究报告,包括:GPFS的存取与管理机制,GPFS的容错机制与应用实例。PVFS的存取与管理机制,PVFS的应用实例与性能,以及安装方法等。另外,难能可贵的是中文资料!!

    JAVA并行计算的一些资料 论文

    JAVA并行计算的一些资料 论文JAVA并行计算的一些资料 论文JAVA并行计算的一些资料 论文JAVA并行计算的一些资料 论文

    一种异构多核处理器的并行流存储结构.pdf

    一种异构多核处理器的并行流存储结构.pdf

    Java8ParallelStream:Java 8并行流示例

    Java8并行流Java 8并行流示例

    并行计算体系结构课件

    空间上的并行导致了两类并行机的产生,按照Flynn的说法分为:单指令流多数据流(SIMD)和多指令流多数据流(MIMD)。我们常用的串行机也叫做单指令流单数据流(SISD)。MIMD类的机器又可分为以下常见的五类:并行...

    JDK8并行流及串行流区别原理详解

    主要介绍了JDK8并行流及串行流区别原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    使用Java并行流实现一个简单的文件搜索程序.txt

    首先通过getFiles()方法获取指定文件夹下的所有文件和子目录,然后使用parallelStream()方法将文件列表转换为并行流。接着使用filter()方法筛选出所有的子目录,并使用mapToLong()方法对每个子目录进行递归调用find...

    并行计算实验快速排序的并行算法

    2、熟悉快速排序的并行算法 3、实现快速排序的并行算法 3.2 实验环境及软件 单台或联网的多台PC机,Linux操作系统,MPI系统。 3.3实验内容 1、快速排序的基本思想 2、单处理机上快速排序算法 3、快速排序算法的...

    论文研究-多优先级业务流多通道并行传输.pdf

    针对已有的多业务流多通道并行传输不支持业务流之间优先级的问题, 将业务的优先级映射到多个通道, 建立了具有优先级保证的多业务流多通道数据传输模型。基于排队论知识将模型抽象成多维Markov链, 并使用两阶段的PH...

    mydumper:mydumper官方项目

    并行性(因此,速度)和性能(避免了昂贵的字符集转换例程,整体上高效的代码) 易于管理输出(用于表的单独文件,转储元数据等,易于查看/解析数据) 一致性-维护所有线程的快照,提供准确的主从日志位置等可管理性...

    支持CAD_CAPP并行的工作流模型研究.pdf

    支持CAD_CAPP并行的工作流模型研究.pdf

    cuda7.0:主机多线程流实现kernel并行

    cuda7.0:新功能实现主机多线程多流之间 实现kernel并行。主机的每个线程分配一个流 采用这个新特性可以实现多流之间的kernel并发执行

    论文研究-基于MapReduce架构的并行矩阵Apriori算法.pdf

    提出一种基于矩阵的并行关联规则算法Apriori_MMR。该算法结合数据划分的思想进行并行化改进,简化了生成候选项的连接步骤,仅需对事务数据库扫描两次,同时在计算过程中还能对事务进行压缩,从而进一步提高了算法的...

    基于并行计算的数据流处理方法研究_周勇.caj

    基于并行计算的数据流处理方法研究_周勇.caj

    [并行计算——结构·算法·编程].陈国良.文字版

    并行计算 陈国良编著 呵呵 大家来下载 是第三版《并行计算:结构•算法•编程(第3版)》是并行计算系列丛书之开篇,它以并行计算为主题,围绕并行计算机、并行算法和并行程序设计展开讨论,强调融并行计算机体系结构、...

    并行计算导论 pdf

    本书是并行计算,特别是分布式并行计算环境和消息传递并行 编程的入门教材,目的是促进并行计算技术在我国的应用。书中介 绍了并行计算的基础知识、Linux/UNIX 的基本使用、基于Linux 机 群的并行计算平台的建立、...

Global site tag (gtag.js) - Google Analytics