博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
myloader mysql_myloader原理0
阅读量:5741 次
发布时间:2019-06-18

本文共 2028 字,大约阅读时间需要 6 分钟。

开源MySQL多线程逻辑导入工具myloader原理与改进

在上一篇中,介绍了多线程备份工具mydumper的实现及网易对其所做的优化,本篇聊聊与mydumper配合使用的myloader工具。

myloader是MySQL领域少有的多线程的恢复工具,为了能够更好的理解其如何进行工作,有必要对mydumper所生成的备份结果进行简单介绍,下图即为mydumper 0.9.1版本所输出的备份目录结构:

rds-user@import-blogbench-test:~$ ls mydumper-data/

dumpdb.dumptable.00000.sql

dumpdb.dumptable-schema.sql

dumpdb-schema-post.sql

dumpdb.dumptable.00001.sql

dumpdb.dumptable-schema-triggers.sql

metadata

dumpdb.dumptable.00002.sql

dumpdb.dumptable-schema-view.sql

dumpdb.dumptable.00003.sql dumpdb-schema-create.sql

metadata保存一致性数据导出时的BinLog信息和导出开始和结束时间,形如:

Started dump at: 2016-03-20 21:18:54

SHOW MASTER STATUS: Log: mysql-bin.000027 Pos: 350229576

Finished dump at: 2016-03-20 21:19:04

dumpdb和dumptable分别表示导出的数据库和表的名称;

dumpdb-schema-create.sql和dumpdb-schema-post.sql分别保存数据库dumpdb的建库语句和该库的functions、procedures及events;

dumpdb.dumptable-schema.sql保存建表语句;dumpdb.dumptable-schema-view.sql保存表相关视图;dumpdb.dumptable-schema-triggers.sql保存表相关的触发器;

dumpdb.dumptable.00000.sql ~ dumpdb.dumptable.00003.sql保存dumptable表所导出的数据。

整个myloader数据恢复流程如下图所示:

e755257540720ed5af019ad939869b2f.png

如上图所示,mydumper的回复可分为三个阶段:

首先由myloader主线程完成建库建表,依次将备份目录下dumpdb-schema-create.sql和dumpdb.dumptable-schema.sql中的建库和建表语句应用到目标数据库实例中;

接着myloader主线程会生成多个工作线程,由这些工作线程将所有dumpdb.dumptable.*.sql文件中的记录导入到对应表中,这个阶段是并行的,并行粒度为文件,工作线程完成所有dumpdb.dumptable.*.sql文件数据导入后销毁;

最后主线程将dumpdb-schema-post.sql、dumpdb.dumptable-schema-view.sql和dumpdb.dumptable-schema-triggers.sql文件中存在的schema导入对应数据库和表中

myloader参数比较简单,主要有如下几个:

-d,指定待恢复的备份目录,注意,该目录必须是mydumper生成的,myloader会判断该目录下是否存在metadata文件;

-q,即queries-per-transaction,表示在工作线程导入表数据时,多少条记录做一次commit,默认为1000;

-o,该参数作用于myloader第一阶段,为true时会删除目标数据库实例对应数据库下的同名表;

-B,表示恢复时,将表恢复到指定的数据库中;

-s,该参数为myloader 0.9.1新增参数,用于恢复备份目录中指定的数据库;

-e,表示在恢复时开启BinLog;

-t,表示主线程需要创建的工作线程数目,影响myloader数据恢复并发度,需要综合存储IO性能等因素确定具体值

网易RDS对myloader工具做了以下几点优化:

增强-s参数,官方版本-s仅能指定某个数据库,网易RDS对其进行了增强,可以指定多个数据库;

增加-M参数,用于在多线程情况下,调节数据并发度,如设置Threads_running=100,则工作线程在读取每个数据文件前,会先判断当前数据库实例负载是否达到或超过该值,若是,则该工作线程暂时进入休眠状态;

与mydumper相似,网易RDS为myloader也增加了进度查询功能,能够查询工作线程所需执行的所有导入任务数、当前已经完成的导入任务数及每个导入任务所花费时间。

转载地址:http://nfnzx.baihongyu.com/

你可能感兴趣的文章
Android NDK(二) CMake构建工具进行NDK开发
查看>>
AppSettings和ConnectionStrings的区别
查看>>
老赵 MSDN Webcast ASP.NET MVC框架开发系列课程
查看>>
MongoDB分布式集群搭建(分片加副本集)
查看>>
webstorm 2018.2.3 license server
查看>>
测试工作面试思路--简历篇
查看>>
个人中心标签页导航
查看>>
权限组件(14):分配权限功能
查看>>
Wannafly挑战赛9
查看>>
ACM基础算法入门及题目列表
查看>>
[BZOJ4538]网络
查看>>
nginx使用GeoIP限制访问并支持白名单
查看>>
制作GIF动画
查看>>
mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
查看>>
P2023 [AHOI2009]维护序列
查看>>
031:verbatim 标签
查看>>
Ubuntu快捷键
查看>>
JavaScript之JS实现动画效果
查看>>
[转载]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法...
查看>>
eclipse下修改项目名导致tomcat内发布名不一致的解决方法 .
查看>>