MySQL多线程数据导入导出工具Mydumper

http://afei2.sinaapp.com/?p=456

今天在线上使用mysqldump将数据表从一个库导入到另外一个库,结果速度特别慢,印象中有个多线程的数据导入导出工具Mydumper,于是简单的调查和测试一下。
下午导数据的过程中,这个表是没有更新的,因此不需要确保多个数据之间的一致性,就简单的写个shell脚本启动多个mysqldumper来导数据,这样有几个问题:

  1. 需要处理表数据大小不均匀的问题,有的会很快结束,有的会比较慢。
  2. 如果需要保证多个导出之间的一致性时,则无法保证。

Mydumper是一个使用c语言编写的多线程导出导入工具,并且能够保证多个表之间的一致性。Mydumper已经好几篇blog在讨论:Mydumper性能测试Mydumper使用和源码分析。通过stronghearted的测试,我们看到不是线程越多越好,6个线程的时候速度最快(这个肯定跟机器的配置等诸多因素有关,只能作为一个经验值而不是绝对值,机器好的时候,线程越多越好)。

一、原理

Mydumper如何保证数据的一致性?下面是官方给出的解答,摘抄如下,主要是使用flush tables with read
lock和start transaction with consistent snapshot,在flush tables with read
lock时开启所有的线程,并且通过show master status和show slave
status获得当前的position(便于使用Mydumper重建slave以及确保多个表之间的数据一致性)。

  1. Global write lock is acquired (“FLUSH TABLES WITH READ LOCK”)
  2. Various metadata is read (“SHOW SLAVE STATUS”,”SHOW MASTER STATUS”)
  3. 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.
  4. Once all worker threads announce the snapshot establishment, master executes “UNLOCK TABLES” and starts queueing jobs.

二、安装

  1. 下载源码,https://launchpad.net/mydumper
  2. 阅读README,根据不同的OS,安装不同的依赖
  3. cmake .
  4. 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 ./

四、测试

对mysqldump和Mydumper做了一个简单测试,测试结果如下(测试结果受环境影响,结果仅供参考):

5张表,每张表600M。

导出:

远程进行,导出两遍,取最小值。

mysqldump 37s

Mydumper 21s

导入:

mysqldump 14m4s

mydumper 9m4s

五、结论

结论:Mydumper在导出导入过程因为可以多线程进行,因此速度上肯定是优于mysqldump,可以用来替换mysqldump;Mydumper不能读取/etc/my.cnf中的配置文件,这个挺麻烦的,必须进行指定。

0

您可能也喜欢:

时间: 2024-11-01 21:56:29

MySQL多线程数据导入导出工具Mydumper的相关文章

HData——ETL 数据导入/导出工具

HData是一个异构的ETL数据导入/导出工具,致力于使用一个工具解决不同数据源(JDBC.Hive.HDFS.HBase.MongoDB.FTP.Http.CSV.Excel.Kafka等)之间数据交换的问题.HData在设计上同时参考了开源的Sqoop.DataX,却与之有不同的实现.HData采用“框架+插件”的结构,具有较好的扩展性,框架相当于数据缓冲区,插件则为访问不同的数据源提供实现. [HData特性] 1.异构数据源之间高速数据传输: 2.跨平台独立运行: 3.数据传输过程全内存

Oracle exp/imp数据导入导出工具基本用法

一.获取帮助 exp/imp help=y 二.数据导出 1.将数据库完全导出,设置full选项exp system/[email protected] file=d:\db.dmp full=y 2.导出数据库结构,不导出数据,设置rows选项exp system/[email protected] file=d:\db.dmp rows=n full=y 3.当导出数据量较大时,可以分成多个文件导出,设置filesize选项exp system/[email protected] file=

Sharepoint列表数据导入导出工具(支持查阅项及用户类型)

基于.NET客户端对象模型.主要思路:获取选择的列表,读取列表字段,选择需要导出或导入的字段,导出(循环选择的字段动态产生CAML查询语句查出数据存放到GridView中,然后读取数据到Excel),导入数据(读取Excel数据到GridView,循环GridView数据给选择的需要导入的字段赋值) 主要代码: 1.加载Lists 1 private void btnLoadLists_Click(object sender, EventArgs e) 2 { 3 string spUrl =

PLSQL_数据泵Datapump导入导出数据IMPDP / EXPDP(概念)(Oracle数据导入导出工具)

2014-08-31 BaoXinjian 一.摘要 在平常备库和数据库迁移的时候,当遇到大的数据库的时候在用exp的时候往往是需要好几个小时,耗费大量时间.oracle10g以后可以用expdp来导出数据库花费的时间要远小于exp花费的时间,而且文件也要小很多. 二.exp/imp与expdp/impdp区别 (1) 把用户usera的对象导到用户userb,用法区别在于fromuser=usera touser=userb ,remap_schema=’usera’:'usera’ . 例如

mysql的数据导入导出

1.Navicat for Mysql XML导出导入格式支持二进制数据:虽然同步数据人眼看不出区别,但是java尝试读取数据时,报datetime字段取出的值为“0000-00-00 00:00:00”,找不到理由: 2.mysqldump数据导出 1) export: mysqldump -h <ip> -P <port> -u <user> <database> <table> -p > <table>.sql 2) im

mysql会员数据导入导出

系统迁移或者更换的时候用到的,特别注意里面的引号,很容易弄错了. 旧会员导出 select 'uid','username','password','email','salt' union select 'uid','username','password','email','salt' from 'uc_members' into outfile '/score.sql' 导入 load data infile '/score.sql' into table `chbwzstb_users`

[转]Mysql导入导出工具Mysqldump和Source命令用法详解

Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql命令行导出工具Mysqldump命令能够将Mysql数据导出为文本格式(txt)的SQL文件,通过Mysql Source命令能够将SQL文件导入Mysql数据库中,下面通过Mysql导入导出SQL实例详解Mysqldump和Source命令的用法. 在PHP网站开发中,时常遇到Mysql数据库备份或数据库迁移工作,这时Mysql怎么导入导出数据库中的数据就非常关键,M

如何利用sqoop将hive数据导入导出数据到mysql

运行环境  centos 5.6   hadoop  hive sqoop是让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具. 上海尚学堂hadoop大数据培训组原创,陆续有hadoop大数据技术相关文章奉上,请多关注! 在使用过程中可能遇到的问题: sqoop依赖zookeeper,所以必须配置ZOOKEEPER_HOME到环境变量中. sqoop-1.2.0-CDH3B4依赖hadoop-core-0.20.2-CDH3B4.ja

Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具

转:https://blog.csdn.net/qx12306/article/details/67014096 Sqoop是一款开源的工具,主要用于在Hadoop相关存储(HDFS.Hive.HBase)与传统关系数据库(MySql.Oracle等)间进行数据传递工作.Sqoop最早是作为Hadoop的一个第三方模块存在,后来被独立成为了一个Apache项目.除了关系数据库外,对于某些NoSQL数据库,Sqoop也提供了连接器. 一.Sqoop基础知识 Sqoop项目开始于2009年,可以在H