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 条评论
登录 后参与评论

相关文章

来自专栏猿天地

Smconf 增加新功能啦

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

2966
来自专栏杨建荣的学习笔记

实用的top命令(r3笔记54天)

对于系统级的监控来说,top命令是实用而高效的瑞士军刀。相比vmstat,sar来说提供的是实时的进程信息,对于监控性能,排查问题是很高效的。而且提供了交互式的...

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

http-server 超轻量级web服务器

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

32910
来自专栏闵开慧

eclipse中执行程序显示找不到主类

eclipse中执行程序显示找不到主类 这种情况一般出现在工程中已编译有class文件的java文件,而后面新建的java则不会出现问题。这种情况说明工程bin...

3545
来自专栏斑斓

Spark Submit的ClassPath问题

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

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

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

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

1653
来自专栏磨磨谈

CentOS GRUB损坏修复方法

博客很久没有更新了,一个原因就是原来存放部署博客的环境坏了,硬盘使用的是SSD,只要读取到某个文件,整个磁盘就直接识别不到了,还好博客环境之前有做备份,最近一直...

1403
来自专栏北京马哥教育

如何部署Samba服务

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

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

Elasticsearch 5.0 —— Head插件部署指南(Head目前支持5.0了!请不要看本篇文章了)

使用ES的基本都会使用过head,但是版本升级到5.0后,head插件就不好使了。下面就看看如何在5.0中启动Head插件吧! Head目前支持5.0了!...

1987
来自专栏博客园

Nginx各种配置

   nginx压缩技术为gzip,这种压缩技术可以使得网页大小压缩成原来的30%

2763

扫码关注云+社区

领取腾讯云代金券