mydumper介绍
MySQL自身的mysqldump工具支持单线程工作,依次一个个导出多个表,没有一个并行的机制,这就使得它无法迅速的备份数据。
mydumper作为一个实用工具,能够良好支持多线程工作,可以并行的多线程的从表中读入数据并同时写到不同的文件里,这使得它在处理速度方面快于传统的mysqldump。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起DML阻塞。但一般现在的MySQL都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑。这样,mydumper能更好的完成备份任务。
mydumper特性
多线程备份
因为是多线程逻辑备份,备份后会生成多个备份文件
备份时对MyISAM表施加FTWRL(FLUSH TABLES WITH READ LOCK),会阻塞DML语句
保证备份数据的一致性
支持文件压缩
支持导出binlog
支持多线程恢复
支持以守护进程模式工作,定时快照和连续二进制日志
支持将备份文件切块
mydumper的安装
mydumper使用c语言编写,使用glibc库
mydumper安装所依赖的软件包
yum install glibc zlib pcre pcre-devel gcc gcc-c++ cmake make -y
安装依赖软件包,将mysql客户端库文件路径添加至/etc/ld.so.conf, 如/usr/local/mysql/lib
wget https://github.com/maxbube/mydumper/releases/download/v0.9.5/mydumper-0.9.5-2.el7.x86_64.rpm
安装完成后生成两个二进制文件mydumper和myloader位于/usr/local/bin目录下
主要步骤概括
(1)主线程 FLUSH TABLES WITH READ LOCK, 施加全局只读锁,以阻止DML语句写入,保证数据的一致性
(2)读取当前时间点的二进制日志文件名和日志写入的位置并记录在metadata文件中,以供即使点恢复使用
(3)N个(线程数可以指定,默认是4)dump线程 START TRANSACTION WITH CONSISTENT SNAPSHOT; 开启读一致的事物
(4)dump non-InnoDB tables, 首先导出非事物引擎的表
(5)主线程 UNLOCK TABLES 非事物引擎备份完后,释放全局只读锁
(6)dump InnoDB tables, 基于事物导出InnoDB表
(7)事物结束
备份所生成的文件
所有的备份文件在一个目录中,目录可以自己指定
目录中包含一个metadata文件
记录了备份数据库在备份时间点的二进制日志文件名,日志的写入位置,
如果是在从库进行备份,还会记录备份时同步至主库的二进制日志文件及写入位置
每个表有两个备份文件:
database.table-schema.sql 表结构文件
database.table.sql 表数据文件
如果对表文件分片,将生成多个备份数据文件,可以指定行数或指定大小分片
mydumper和myloader的使用
mydumper参数
-B, --database