MySQL 自身的 mysqldump 工具支持单线程工作, 依次一个个导出多个表,没有一个并行的机 ,这就使得它无法迅速的备份数据。
mydumper 作为一个实用工具,能够良好支持多线程工作, 可以并行的多线程的从表中读入数据并同时写到不同的文件里 ,这使得它在处理速度方面快于传统的 mysqldump 。其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起 DML 阻塞。但一般现在的 MySQL 都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑。这样, mydumper 能更好的完成备份任务。
mydumper 特性
多线程备份 因为是多线程逻辑备份,备份后会生成多个备份文件 备份时对 MyISAM 表施加 FTWRL (FLUSH TABLES WITH READ LOCK), 会阻塞 DML 语句 保证备份数据的一致性 支持文件压缩 支持导出binlog 支持多线程恢复 支持以守护进程模式工作,定时快照和连续二进制日志 支持将备份文件切块mydumper 备份机制
mydumper 工作流程图
主要步骤概括
主线程 FLUSH TABLES WITH READ LOCK , 施加全局只读锁,以阻止 DML 语句写入,保证数据的一致性 读取当前时间点的二进制日志文件名和日志写入的位置并记录在 metadata 文件中,以供即使点恢复使用 N 个(线程数可以指定,默认是 4 ) dump 线程 START TRANSACTION WITH CONSISTENT SNAPSHOT ; 开启读一致的事物 dump non-InnoDB tables , 首先导出非事物引擎的表 主线程 UNLOCK TABLES 非事物引擎备份完后,释放全局只读锁 dump InnoDB tables , 基于事物导出 InnoDB 表 事物结束 备份所生成的文件所有的备份文件在一个目录中,目录可以自己指定
目录中包含一个 metadata 文件
记录了备份数据库在备份时间点的二进制日志文件名,日志的写入位置,
如果是在从库进行备份,还会记录备份时同步至主库的二进制日志文件及写入位置
每个表有两个备份文件:
如果对表文件分片,将生成多个备份数据文件,可以指定行数或指定大小分片
安装使用实例
假设现有2台DB服务器,分别用于A业务与B业务,其中A业务比较重要,需要对A业务的1个DB(TaeOss)进行热备,大概有40G的数据,并用业务B的DB服务器作为备机,服务器分布如下:
10.137.143.151 A业务
10.137.143.152 B业务
假设要达到的要求是:
在导出A业务的DB(TaeOss)时,不能对A业务有影响。同时在B业务的DB服务器上进行恢复时,也不能有较大影响,尽量控制在1分钟以内。
新闻热点
疑难解答