关于mysql的逻辑导出目前的工具有mysqldump、mysqlpump、mydumper 这三个工具。其中mysqldump是单线程的导出。mysqldump是mysql5.7新增加的一个工具,多线程的并行导出,但是其是表级别的并行(对于单个表还是不能并行)。mydumper是开源的一个多线程并行逻辑导出工具,且是行级别的并行导出。
mydumper原理
主线程负责建立数据一致性备份点、初始化工作线程和为工作线程推送备份任务:
1、对备份实例加读锁,阻塞写操作以建立一致性数据备份快照点,记录备份点BinLog信息;
2、创建工作线程,初始化备份任务队列,并向队列中推送数据库元数据(schema)、非InnoDB表和InnoDB表的备份任务;
3、工作线程负责将备份任务队列中的任务按顺序取出并完成备份:
4、分别建立与备份实例连接,将session的事务级别设置为repeatable-read,用于实现可重复读;
5、在主线程仍持有全局读锁时开启事务进行快照读,这样保证了读到的一致性数据与主线程相同,实现了备份数据的一致性;
6、按序从备份任务队列中取出备份任务,工作线程先进行MyISAM等非InnoDB表备份,再完成InnoDB表备份;这样可以在完成非InnoDB表备份通知后主线程释放读锁,尽可能减小对备份实例业务的影响;
mydumper的记录级备份由主线程负责任务拆分&#x