新技术论坛
搜索
查看: 1070|回复: 0
打印 上一主题 下一主题

[SQL/Oracle] 开源MYSQL多线程逻辑导入工具MYLOADER原理与改进

[复制链接]
  • TA的每日心情
    开心
    2016-12-9 18:18
  • 签到天数: 85 天

    连续签到: 1 天

    [LV.6]常住居民II

    扫一扫,手机访问本帖
    楼主
    跳转到指定楼层
    发表于 2016-4-8 05:42:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
    myloader是MySQL领域少有的多线程的恢复工具,为了能够更好的理解其如何进行工作,有必要对mydumper所生成的备份结果进行简单介绍,下图即为mydumper0.9.1版本所输出的备份目录结构: ...






      myloader是MySQL领域少有的多线程的恢复工具,为了能够更好的理解其如何进行工作,有必要对mydumper所生成的备份结果进行简单介绍,下图即为mydumper0.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


    复制代码


      a、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


    复制代码


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

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

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

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

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

      


      可将整个过程分为三个阶段:

      首先由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,该参数为myloader0.9.1新增参数,用于恢复备份目录中指定的数据库;

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

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

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

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

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

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




    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|Archiver|开发者俱乐部 ( ICP/ISP证:辽B-2-4-20110106号 IDC证:辽B-1-2-20070003号 )

    GMT+8, 2024-12-23 10:45 , Processed in 0.107883 second(s), 22 queries .

    X+ Open Developer Network (xodn.com)

    © 2009-2017 沈阳讯网网络科技有限公司

    快速回复 返回顶部 返回列表