[转载]开源MySQL多线程逻辑导入工具myloader原理
2016-08-23Linux撒加6106°c
A+ A-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的回复可分为三个阶段:
首先由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性能等因素确定具体值