MySQL多线程数据导入导出工具Mydumper
http://afei2.sinaapp.com/?p=456
今天在线上使用mysqldump将数据表从一个库导入到另外一个库,结果速度特别慢,印象中有个多线程的数据导入导出工具Mydumper,于是简单的调查和测试一下。
下午导数据的过程中,这个表是没有更新的,因此不需要确保多个数据之间的一致性,就简单的写个shell脚本启动多个mysqldumper来导数据,这样有几个问题:
- 需要处理表数据大小不均匀的问题,有的会很快结束,有的会比较慢。
- 如果需要保证多个导出之间的一致性时,则无法保证。
一、原理
- Global write lock is acquired (“FLUSH TABLES WITH READ LOCK”)
- Various metadata is read (“SHOW SLAVE STATUS”,”SHOW MASTER STATUS”)
- Other threads connect and establish snapshots (“START TRANSACTION WITH CONSISTENT SNAPSHOT”),On pre-4.1.8 it creates dummy InnoDB table, and reads from it.
- Once all worker threads announce the snapshot establishment, master executes “UNLOCK TABLES” and starts queueing jobs.
二、安装
- 下载源码,https://launchpad.net/mydumper
- 阅读README,根据不同的OS,安装不同的依赖
- cmake .
- make
三、使用
Mydumper不能读取/etc/my.cnf中配置文件,需要手工制定用户名、密码等等
mydumper -P 3306 -u admin -p ‘***‘ -h db23 -B meituan -T test1,test2,test3,test4,test5 -o ./ myloader -v 3 --threads=6 -P 3306 -u admin -p ‘***‘ -h 127.0.0.1 -S /opt/tmp/mysql3306.sock -B test -d ./ |
四、测试
五、结论
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。