开源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数据恢复流程如下图所示:

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

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

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

  3. 最后主线程将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也增加了进度查询功能,能够查询工作线程所需执行的所有导入任务数、当前已经完成的导入任务数及每个导入任务所花费时间。

myloader原理0的更多相关文章

  1. mydumper,myloader原理及实战

    mydumper 特性 (1)多线程备份(和mysqlpump的多线程不同,mysqlpump多线程备份的粒度是表,mydumper多线程备份的粒度是行,这对于备份大表特别有用)(2)因为是多线程逻辑 ...

  2. myloader原理介绍

    myloader恢复主要流程   1.首先由myloader主线程完成建库建表,依次将备份目录下建库和建表文件执行应用到目标数据库实例中:   2.接着myloader主线程会生成多个工作线程,由这些 ...

  3. mysql之 myloader原理介绍

    myloader恢复主要流程   1.首先由myloader主线程完成建库建表,依次将备份目录下建库和建表文件执行应用到目标数据库实例中:   2.接着myloader主线程会生成多个工作线程,由这些 ...

  4. xtrabackup原理0

  5. mysqldump原理0

  6. MYSQL mydumper & myloader

    第三方逻辑备份工具myduper和myloader | xiaoyu的数据库小窝-技术交流http://www.dbaxiaoyu.com/archives/1643 myloader原理0 - ze ...

  7. mydumper/myloader使用详解

      mydumper安装:http://www.cnblogs.com/lizhi221/p/7010174.html mydumper原理:http://www.cnblogs.com/lizhi2 ...

  8. Lucene 4.4.0中常用的几个分词器

    一.WhitespaceAnalyzer 以空格作为切词标准,不对语汇单元进行其他规范化处理.很明显这个实用英文,单词之间用空格. 二.SimpleAnalyzer 以非字母符来分割文本信息,并将语汇 ...

  9. MySQL的索引原理(图解)

    数据库的索引原理 0.什么是索引 ​ 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能 ...

随机推荐

  1. A Spy in the Metro

    题意: n个车站,已知到达相邻车站的时间,有m1辆车从1站出发已知发车时间,有m2辆车从n站出发已知发车时间,求从1到达n所需等车的总时间最小. 分析: 有三种情况,在原地等,乘左到右的车,乘右到左的 ...

  2. UIButton 设置为圆形,并且使用图片(UIImage)当做背景

    -(UIButton *)shareButtonWithIcon:(NSString *)iconName { UIButton *button = [UIButtonbuttonWithType:U ...

  3. SSH无法连接服务器

    服务器版本如下: @kelWEB4:/etc# lsb_release -a LSB Version: :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd ...

  4. 网页抓取:PHP实现网页爬虫方式小结

    来源:http://www.ido321.com/1158.html 抓取某一个网页中的内容,需要对DOM树进行解析,找到指定节点后,再抓取我们需要的内容,过程有点繁琐.LZ总结了几种常用的.易于实现 ...

  5. Leetcode Largest Number c++ solution

    Total Accepted: 16020 Total Submissions: 103330     Given a list of non negative integers, arrange t ...

  6. WeChat Official Account Admin Platform Message API Guide

    Keyword: WeChat Message API Text Image Location Link Event Music RichMedia Author: PondBay Studio[We ...

  7. C# 与 VC Dll 传输信息

    考虑: 使用string类型传送: 在VC Dll中解析字符: 使用 string 类型将解析的类型传送到C#程序中: 建立VC解析的函数,提高代码可重用性

  8. SRM 514 DIV1 500pt(DP)

    题目简述 给定一个H×W大小的矩阵,每个格子要么是1~9中的一个数,要么是".",要求你把“.”填成具体的数字(1~9),并且符合以下两个要求: 对于所有的整数r 和 c( 0 & ...

  9. 有趣的Node爬虫,数据导出成Excel

    最近一直没更新了诶,因为学习Backbone好头痛,别问我为什么不继续AngularJs~因为2.0要出来了啊,妈蛋!好,言归正传,最近帮我的好基友扒数据,他说要一些股票债券的数据.我一听,那不就是要 ...

  10. struts2+Hibernate4+spring3+EasyUI环境搭建之三:引入sututs2以及spring与sututs2整合

    1.引入struts2 <!-- struts2 和心包 排除javassist 因为hibernate也有 会发生冲突--> <dependency> <groupId ...