MySQL多线程导入导出工具Mydumper

今天从线上使用mysqldump将数据表从一个库导入到另外一个库,结果导出速度超级慢.于是网上搜了搜发现这个东东.测试之后发现还不错.分享给大家.

简单介绍一下

Mydumper是一个使用C语言编写的多线程导出导入工具,并且能够保证多个表之间的一致性.当然不是线程越多越好(这个跟服务器的配置等诸多因素有关,只能作为一个经验值而不是绝对值,机器好的时候,线程越多越好).

原理

前面提到保持数据一致性如何实现呢?

下面是官方给出的解答

主要是使用flush tables with read lock和start transaction with consistent snapshot,在flush tables with read lock时开启所有的线程,并且通过show master status和show slave status获得当前的position(便于使用Mydumper重建slave以及确保多个表之间的数据一致性)

原版如下:

This is all done following best MySQL practices and traditions:

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")

3.1. 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.

安装:

sudo yum install -y gcc gcc-c++ glib2-devel mysql-devel zlib-devel pcre-devel

cmake

make;make install

安装完会生产两个文件

[mysql@localhost ~]$ ls /usr/local/bin/

mydumper  myloader

例子:

导出

mysql> select count(*) from test;

+----------+

| count(*) |

+----------+

|  1048576 |

+----------+

1 row in set (0.41 sec)

[mysql@localhost bin]$ ./mydumper -u root -p 'xxxxxxxx' -t 4 -B test -T test -c --less-locking -o /home/mysql/

[mysql@localhost bin]$ ls /home/mysql/

test.test-schema.sql.gz   test.test.sql.gz

参数详解

-u "用户"

-p "密码"

-t "指定并行数,默认是4"

-B "指定DB"

-T "指定表"

-c "压缩"

--less-locking "尽量减少锁表锁定时间(针对InnoDB)"

-o "指定目录"

例如:

设置长查询的上限,如果存在比这个还长的查询则退出mydumper,也可以设置杀掉这个长查询

mydumper -u root -p 'xxxx' --long-query-guard 400 --kill-long-queries

通过regex设置正则表达,需要设置db名字

mydumper -u root -p 'xxxx' --regex=test.name

导入

mysql> drop table test;

Query OK, 0 rows affected (0.26 sec)

mysql> exit

Bye

[mysql@localhost bin]$./myloader -u root -p 'xxxxx' -B test -d /home/mysql/

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| test           |

+----------------+

1 row in set (0.00 sec)

mysql> select count(*) from test;

+----------+

| count(*) |

+----------+

|  1048576 |

+----------+

1 row in set (0.39 sec)

结论:

Mydumper在导出导入过程因为可以多线程进行,因此速度上优于mysqldump.(题外话:导出上亿表数据的时候速度提升明显啊.^_^太爽了.大爱这个东东)

注意点:

--no-locks参数

这个参数官方给出英文注释"Do not execute the temporary shared read lock.  WARNING: This will cause inconsistent backups"也就是会导致备份不一致.

在导出myisam表时有表锁.所以先处理myisam表,记录myisam表个数,并在myisam表都处理完毕后,要立即解锁.尽量减少锁定的时间.

阅读(4557) | 评论(0) | 转发(1) |

mysql多线程导出_MySQL多线程导入导出工具Mydumper相关推荐

  1. mysql数据库导出_MySQL数据库导入导出详解[转发]

    1. 概述 MySQL数据库的导入,有两种方法: 1) 先导出数据库SQL脚本,再导入: 2) 直接拷贝数据库目录和文件. 在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况 ...

  2. mysql数据库导入导出_MySQL数据库导入导出详解

    MySQL数据库的导入,有两种方法:1) 先导出数据库SQL脚本,再导入:2) 直接拷贝数据库目录和文件.在不同操作系统或MySQL版本情况 1. 概述 MySQL数据库的导入,有两种方法: 1) 先 ...

  3. mysql 快速导出_mysql 快速导入导出

    随着数据库的数据越来越大,采用mysqldump 越来越慢,测试环境的机器配置不高,2G左右的数据导入进入像蜗牛一般,非常影响效率,这里采用一些改进的方法来比以前导入的速度提高好几倍,但日常配备应有更 ...

  4. hive向mysql导数据_Mysql Hive 导入导出数据

    ---王燕行转列sql select split(concat_ws(',',collect_set(cast(smzq as string))),',')[1] ,split(concat_ws(' ...

  5. mysql 交互命令 导出_MySQL数据导入导出方法与工具(2)

    批处理导入文件,从sql文件导入数据到数据库中 ,批处理是一种非交互式运行mysql程序的方法,如同您在mysql中使用的命令一样,你仍然将使用这些命令. 为了实现批处理,您重定向一个文件到mysql ...

  6. c 控制mysql数据导出_MySql数据库导入导出的三种方式

    第一种: 使用mysql自带的Workbench可视化工具进行操作,如图: 选择好以后按  start Export 选择好以后按  start import 第二种: 使用Navicat 右键点击转 ...

  7. MYSQL常用命令大全(导入导出、创建、单多表查询(超详细)、授权)

    MYSQL常用命令 一.导入导出 1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认 ...

  8. mysql profile 导出_MySQL数据的导出和导入工具:mysqldump_MySQL

    mysqldump 导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个 ...

  9. mysql边备份边导入么_MySQL 怎么导入导出操作

    mysql 如何导入导出操作 1.MySQL 如何导入导出个别需要数据记录? – 先导出数据所在的表结构: mysql> show create table CHARBASE into outf ...

最新文章

  1. Toast 自定义位置和带图
  2. UnicodeEncodeError: 'ascii' codec can't encode character '\xe3' in position 0: ordinal not in range
  3. boost::hana::drop_while用法的测试程序
  4. Tensorflow源码解析1 -- 内核架构和源码结构
  5. mysql grant教程_MySQL如何使用授权命令grant
  6. 谈谈神经网络的大规模训练优化
  7. 阶段3 2.Spring_05.基于XML的IOC的案例1_1 基于XML的IOC的案例-案例准备
  8. java判断日期是否是同一周_java中如何判断两个日期是否是同一周
  9. OSPF之区域间路由
  10. 什么是自然语言理解?自然语言理解的准则是什么?
  11. excel表格如何转换成word表格_轻松将Excel表格完美转换成Word文档
  12. java重复执行方法_重复java方法
  13. 还记得最初的九九乘法表吗?
  14. 计算机工程师标准着装,工程师穿什么样的衣服才好看
  15. 真·浅谈System.setOut()
  16. Android NFC智能卡介绍
  17. rosetta stone fatal application error: #1141错误 (罗塞塔石碑1141) 解决方法
  18. RxSwift系列—RxSwift高阶函数
  19. 一文学会LaTeX基础
  20. 易语言写64位魔兽世界游戏 寻路call 教程

热门文章

  1. 页面重绘和回流以及优化
  2. exif_imagetype() 函数在linux下的php中不存在
  3. linux系统优化配置
  4. bzoj3202:[Sdoi2013]项链
  5. linux 系统负载高 如何检查
  6. css实现文字太长,显示省略号
  7. 没有该栏目数据 可能缓存文件(data/cache/inc_catalog_base.inc)没有更新请检查是否有写入权限...
  8. WinCE下音频频谱显示效果图
  9. 工厂供电MATLAB仿真,工厂供电虚拟仿真实验设计研究
  10. txt文本如何改html类型,编辑html格式文本可改成txt格式(可以替换或更换某文本)新手...