MyLoader原理简介

1. 简介

提起mydumper,首先让人想到的是相对于mysqldump的多线程逻辑备份工具,而往往会忽略同是mydumper项目下的myloader工具。myloader是与mydumper工具备份配合使用的多线程备份恢复工具,可以直接以mydumper输出文件为输入,恢复备份数据。

2. 备份恢复

相对于mydumper来说,myloader的逻辑会简单很多。如果熟悉mydumper的原理和实现,或者有看过mydumper原理详解,那么理解myloader的流程只需要重点关注几个点就好了。

与备份导出不一样,备份恢复的过程不涉及到一致性位点的问题,主要关注的点有:

1、如何实现多线程并行导入,子线程与主线程如何交互
2、导入对象(包括表结构、数据、视图、触发器、存储过程、事件等)的顺序应该是怎样的
3、如何设置session参数加快导入速度等

4. 备份的详细流程

myloader恢复数据的详细流程如下

myloader flow

流程图中的步骤基本与源码中的函数名称对应,可以将源码与流程图对照来看。

5. 几个值得关注的点

从上面的详细流程图上可以看到,myloader的任务执行模型与mydumper是一样的,默认有四个子线程。主线程负责主逻辑,子线程为worker线程,执行具体的任务。

主线程和子线程交互

主线程负责导入库表结构,创建异步导入任务以及结束任务放入阻塞队列,等待子线程执行完所有的任务并退出,主线程等待子线程退出后,接着导入其他对象。

二进制日志

主线程和子线程默认情况下都执行了set sql_log_bin = 0,在导入的过程中不写入binlog。默认情况下加快了数据导入的速度,也避免写重复的数据。不过在某些情况下,不计入binlog会导致一些麻烦,比如主从同步条件下导入数据到主库,有下游服务依赖于binlog来获取数据库的变更等。

导入参数设置

主线程的mysql session在开始时就设置了set foreign_key_checks = 0,不检查外键。原因是,在restore database步骤中主线程会阻塞的创建所有的表,在创建的过程中检查外键很可能导致表创建失败。

子线程在创建之初也会设置mysql session的参数set unique_checks = 0,不检查唯一键。这个参数会加快数据的导入速度。不检查唯一键是基于库表结构和数据是由mydumper导出的,如果之前都已经成功导出,导入时检查唯一性就是冗余的操作。

对象的导入顺序

对象的恢复顺序与mydumper导出的过程正好相反。在具体分配任务的时候,对象在mydumper和myloader与主线程、子线程的对应关系略有不同。

1、库表结构
2、每个库表的具体数据
3、存储过程、函数、事件
4、视图
5、触发器

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏斑斓

Spark Submit的ClassPath问题

需求场景: 我们的产品需要与客户的权限系统对接,即在登录时使用客户的认证系统进行认证。集成认证的方式是调用客户提供的jar包,调用userService的aut...

4389
来自专栏Android相关

Linux编程--文件原子操作

当多个进程同时访问一个文件的时候,普通的write/read在执行的时候,无法保证操作的原子性,可能会导致文件被污染,达不到预期的结果。

1673
来自专栏云计算教程系列

如何使用Nginx创建临时和永久重定向

HTTP重定向是将一个域或地址指向另一个域或地址的方式。有几种不同的重定向,每种重定向都意味着与客户端浏览器不同。两种最常见的类型是临时重定向和永久重定向。

1113
来自专栏jmeter高手高高手

Jmeter(二十六)_数据驱动测试

花了一点时间做了一个通用的执行引擎,好处就是我不用再关注测试脚本的内容,而是用测试用例的数据去驱动我们执行的方向。(这个只适合单个接口的测试,具体运用到接口自动...

2612
来自专栏奔跑的蛙牛技术博客

Java虚拟机加载类文件大全-精细版

类加载器存在父子关系 例如系统类加载器要加载java.util.ArrayList,首先要求扩展类进行加载,然后扩展类加载器要求引导类加载器进行加载。

641
来自专栏猿天地

Smconf 增加新功能啦

这2天抽空改了下Smconf,增加了2个比较实用的功能 支持手动触发推送配置到指定的节点 修改配置可以选择推送的节点,可用于做灰度发布测试 client端增加配...

2836
来自专栏北京马哥教育

如何部署Samba服务

一、samba存在的意义 有时为了方便windows与linux虚拟机之间的文件共享,我们一般用SAMBA服务来解决,有人会问,VMTool不是可以直接设置sh...

4315
来自专栏xingoo, 一个梦想做发明家的程序员

http-server 超轻量级web服务器

有的时候做前端,想要运行一些代码,但是又没有必要使用tomcat或者Apache http server,这个时候一个轻量级的简单的http server就可...

28710
来自专栏Linyb极客之路

nginx常见架构

总结 开启压缩主要是为了减少网络传输消耗,浏览器会对压缩的文件进行解压缩,这个过程要快很多。

1294
来自专栏决胜机器学习

《Redis设计与实现》读书笔记(二十一) ——Redis服务器定时函数serverCron详解

《Redis设计与实现》读书笔记(二十一) ——Redis服务器定时函数serverCron详解 (原创内容,转载请注明来源,谢谢) 一、概述 redis...

3304

扫码关注云+社区