目的
由于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并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了...
MyDumper-Tool基于 mydumper 开发,并行上传 MySQL 数据库备份文件到公有云对象存储上由于 mydumper 只支持备份到本地,所以该工具以并行的方式将本地备份的文件一个个不间断上传到对象存储在减小本地存储空间消耗的...
而`mydumper`通过并行处理,将这个过程分割成多个任务,使得恢复过程显著加速,降低了业务中断的时间。 `mydumper-0.6.2`的使用通常包括以下几个步骤: 1. 安装:下载`mydumper`的源码包,如`mydumper-0.6.2`,编译...
传统的单线程备份方式在处理大型数据库时可能会非常耗时,而`go-mydumper`通过并行处理多个表或分区,显著提高了备份的速度。它会将每个表拆分成多个小文件,然后分别进行处理,利用多核CPU的优势,使得整个备份过程...
### 并行文件系统调研报告知识点总结 #### 一、并行文件系统概览 - **背景介绍**:随着计算能力的迅速提升,磁盘I/O能力成为了制约高性能计算发展的瓶颈之一。传统的串行文件系统难以满足大规模并行计算的需求,...
在3个并发线程下,mydumper备份test数据库耗时10分钟10秒,同样使用gzip压缩。mydumper还支持通过chunk方式批量导出,进一步优化了备份速度。 测试结果表明,mysqlpump的备份效率最高,mydumper次之,mysqldump最慢...
3. **并行备份**:mydumper利用多线程同时对不同的数据块进行备份,每个线程负责一个或多个数据块,显著提升了整体备份效率。 4. **压缩优化**:备份文件通常会被压缩,mydumper支持多种压缩算法,如zlib和lz4,既...
5. **并行流(Parallel Stream)**:Java 8引入了并行流,允许开发者利用硬件并行性对数据进行并行操作。Stream API的parallel()方法可以将顺序流转换为并行流,从而在处理大量数据时提高性能。 6. **Fork/Join框架**...
并行流是Java 8引入的一个重要特性,它极大地提升了数据处理的速度,特别是在处理大量数据时。并行流的工作原理是将数据集分成多个部分,然后利用多线程并发地处理这些部分,最后再将结果合并。这与传统的单线程处理...
Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找...也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。
mydumper以其并行处理能力和对InnoDB存储引擎的优化而知名,能够在极短的时间内完成大量数据的备份,这对于处理海量数据的大型数据库来说,无疑是一大福音。 1. **mydumper特性** - **并行处理**:mydumper能够...
"JDK8并行流及串行流区别原理详解" 在 Java 8 中,引入了新的 Stream API,简化了创建并行集合和数组的代码。这使得并行编程变得非常流行。但是,多线程和并行处理的开销很大,因此需要了解什么时候使用并行流,...
【摘要】中提到的“一种异构多核处理器的并行流存储结构”是一种针对YHF I54—3处理器的存储系统设计方案。该处理器具有18套浮点处理单元,设计目标是最大化利用其强大的峰值计算能力。文章提出了一个并行流存储层次...
* 并行备份数据库和数据库中的对象,以加快备份过程。 * 更好的控制数据库和数据库对象(表,存储过程,用户帐户)的备份。 * 备份用户账号作为帐户管理语句(CREATE USER,GRANT),而不是直接插入到MySQL的系统...
- 尽管并行流在处理大数据集时表现出色,但对于小数据集来说,额外的线程开销可能导致并行流的性能反而不如串行流。 4. **资源限制**: - 使用并行流时还需要考虑系统的资源限制,例如CPU核心数量等。过多的并发...
Java 8是Java语言的一个重要版本,引入了许多新特性,其中并行流(Parallel Stream)是提升程序性能的关键工具之一。并行流是Java 8为处理大量数据而设计的一种新概念,它允许数据在多核处理器环境中并行处理,从而...
CAD(计算机辅助设计)与CAPP(计算机辅助工艺规划)并行的工作流模型研究,主要涉及到并行工程、工作流技术和Petri网等核心知识点。并行工程是一种可以提升工程设计效率、缩短产品开发周期的现代设计理念,其核心...
CUDA 7.0:主机多线程流实现 kernel 并行 正如我们所知,异构计算是关于如何高效地使用系统中所有的处理器,包括 CPUs 和 GPUs。为了做到这一点,应用程序必须能够在不同的处理器上同步执行函数。CUDA 应用程序通过...
在当今大数据时代,数据备份存储成为保障信息安全的重要手段,特别是在并行数据环境下,面对大数据量的存储,传统的备份存储方法已经难以满足日益增长的需求。针对这一问题,姚迎乐和张志华两位研究者在《面向大数据...
在这个示例中,我们关注的是如何使用 Java 8 的并行流(Parallel Stream)来实现大规模数据的快速求和。 并行计算是一种编程范式,它将大型任务分解为多个小任务,这些小任务可以在不同的处理器核心上同时运行,以...