<--目录-->

1)mydumper介绍

2)mydumper特性

3)mydumper参数

4)mydumper安装方法

5) mydumper效率测试

6)mydumper导出实战

7)mydumper导出的文件介绍

8)myloader参数

9)myloader导入实战


【mydumper介绍】

 mydumper是一个针对 MySQL 和 Drizzle 的高性能多线程备份和恢复工具。此工具的开发人员分别来自  MySQL、Facebook、SkySQL公司,目前已经有一些大型产品业务测试并使用了该工具。我们在恢复数据  时也可以使用myloader工具


【mydumper特性】

 1、采用轻量级C语言写的代码

 2、相比于mysqldump,其速度快了近10倍

 3、具有事务性和非事务性表一致的快照(适用于0.2.2+)

 4、可快速进行文件压缩

 5、支持导出binlog
 6、可多线程恢复(适用于0.2.1+)

 可以用守护进程的工作方式,定时扫描和输出连续的二进制日志


【mydumper参数】 

 注:标红的为必须掌握参数

 -h:连接的MySQL服务器

 -u:用户备份的连接用户

 -c:压缩导出的文件

 -p:用户的密码

 -P:连接端口

 -S:连接socket文件 

 -B:指定导出的数据库名,不加该参数,默认将执行的mysql实例下的所有数据库全部导出

 -T:需要备份的表,用逗号(,)分隔

 -o: 输出的目录

 -t: 要使用的并发线程数,默认为4,需要综合存储IO性能等因素确定具体值

 -V:查看版本

 -v:详细级别输出 0 = 沉默, 1 = 错误, 2 = 警告, 3 = 信息,默认是2

 -e: 默认无数据则只有表结构文件,加了-e则有表数据文件。但是表数据文件仍然为空

 -x:支持正则表达式,如 mydumper -regx '^(?!(mysql|test))'

 -i:忽略的存储引擎,用逗号(,)分隔

 -m:不导出表结构和库结构,只导表数据,甚用

 -d: 不导出表数据,只导表结构和库结构

 -long-query-quard:长查询,默认60秒

 -k:kill杀了长时间运行的查询

 -b:导出binlog

 -D:启用守护进程模式

 -I:dump快照间隔,默认60s

 -L:mysqldumper的日志输出,一般在Daemon模式下使用


【mydumper安装方法】

 yum install glib2-devel mysql-devel zlib-devel pcre-devel openssl-devel gcc gcc-c++

 wget -c https://launchpad.net/ubuntu/+archive/primary/+files/mydumper_0.9.1.orig.tar.gz

 tar xzvf mydumper_0.9.1.orig.tar.gz

 cd mydumper-0.9.1/

 cmake .
 make 

 make install


【mydumper效率测试】

 mysqldump 与 mydumper 的执行时间的对比

 [root@localhost mysql]# du -sh test

 20M     test

 可看到一共有20兆数据

 mysqldump执行的时间情况:

 [root@localhost opt]# time mysqldump -uroot -pxxx -B test > test.sql


 real    0m0.671s

 user    0m0.382s

 sys     0m0.033s


 mydumper执行的时间情况:

 [root@localhost backup]# time mydumper -u root -p wsyht -B test -o /data/backup/


 real    0m0.480s

 user    0m0.233s

 sys     0m0.028s


 总结:mydumper的速度是远远比mysqldump的速度快的多的


【mydumer导出实战】 

 1、导出所有库

    不加 -B 会导出所有库,不加 -o 会在当前目录下以当前日期时间命名创建一个目录,如下:

    [root@localhost backup]# mydumper -u root -p wsyht      #不指定参数进行全备

    [root@localhost backup]# ls

    export-20160619-192629   #自已创建的备份目录

    一般不用全备就用-B参数指定库名,不想他自已在当前路径创建备份目录就用-o指定他备份的路径


 2、压缩导出   

    说明:

    -c 压缩参数

    压缩导出后,后辍名会变成.sql.gz

    [root@localhost backup]# mydumper -u root -p wsyht -B test -c -o /data/backup/

    [root@localhost backup]# ls

    metadata  test-schema-create.sql.gz  test.t1-schema.sql.gz  test.t1.sql.gz  


 3、不压缩备份

    导出来的文件则是.sql

    [root@localhost backup]# mydumper -u root -p wsyht -B test -o /data/backup/ 

    metadata  test-schema-create.sql  test.t1-schema.sql  test.t1.sql  

  

    注意!注意!注意!重要事情说三篇。在终端输入命令备份数据的时候,参数后面的值

    定要以空格分隔,否则会报如下错误

    [root@localhost ~]#  mydumper -h 127.0.0.1 -uroot -p 'wsyht' -B test -o /data/backup/ 

    option parsing failed: Error parsing option -r, try --help

    上面报错就是因为-u 没有跟 root 以空格分隔,而是黏在一起写,所以报错


mydumper导出的文件介绍

  在导出文件的时候,可以看到生成了四个文件,下面我们来逐一介绍:

  metadata:这个文件指定了你从开始备份文件到结束备份文件的时间

  test.t1-schema-create.sql: 这个文件是备份创建库的sql语句

  test.t1-schema.sql:这个文件是备份创建表的sql语句 

  test.t1.sql  这个文件是备份插入表数据的sql语句


【myloader参数】

  注:标红的为必须掌握参数

  -d: 指定恢复备份的目录,该目录必须是mydumper生成的,myloader会判断该目录是否存在metadata文件

  -h:连接的MySQL服务器

  -u:用户备份的连接用户

  -C:导入压缩份备出来的文件

  -p:用户的密码

  -P:连接端口

  -S:连接socket文件 

  -B:指定恢复的数据库名

  -o: 表存在则会删除

  -t: 要使用的并发线程数,默认为4,需要综合存储IO性能等因素确定具体值

  -V:查看版本

  -v:详细级别输出 0 = 沉默, 1 = 错误, 2 = 警告, 3 = 信息,默认是2

  -s: 该参数为myloader新增参数,用于恢复备份目录中指定的数据库

  -e:启用恢复数据的二进制日志

  -q: 表示在工作线程导入表数据时,多少条记录做一次提交,默认为1000


【myloader导入实战】

 1、恢复所有库 

    说明,不加-B指定要导的库,默认导入当初备份出来的那个库

    这里之前备份的是test库,则导进库的时候会创建一个test库

    如果是所有库,原理一样,自动创建所有库,因为备份时,库语句也备份了

    [root@localhost test]# mysql -uroot -pwsyht -e "show databases;"     

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

    | Database           |

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

    | information_schema |

    | mysql              |

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

    [root@localhost test]# myloader -u root -p wsyht  -d /data/backup/test/ 

    [root@localhost test]# mysql -uroot -pwsyht -e "show databases;"        

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

    | Database           |

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

    | information_schema |

    | mysql              |

    | test               |

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



2、恢复到新库

   说明:

   无论库存在与否都可以直接导

   如果-B指定需要导入的库不存在,他也会先帮你创建,无需你再手动创建,非常方便

   [root@localhost test]# mysql -uroot -pwsyht -e "show databases;"                     

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

   | Database           |

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

   | information_schema |

   | mysql              |

   | test               |

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

   [root@localhost test]# myloader -u root -p wsyht -B wsyht  -d /data/backup/test/ 

   [root@localhost test]# mysql -uroot -pwsyht -e "show databases;"                

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

   | Database           |

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

   | information_schema |

   | mysql              |

   | test               |

   | wsyht              |

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


3、恢复到原库 

   说明:

   即恢复到已创建好的库和表中,如果已存在了表,则必须加-o参数

   [root@localhost test]# mysql -uroot -pwsyht -e "show databases;"                

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

   | Database           |

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

   | information_schema |

   | mysql              |

   | test               |

   | wsyht              |

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

   [root@localhost test]# myloader -u root -p wsyht -B test  -d /data/backup/test/ 

   ** (myloader:20499): CRITICAL **: Error restoring test.t1 from file test.t1-                  schema.sql.gz: Table 't1' already exists

   上面说我表已经存在,则加-o参数自动删除已存在的表再导进

   [root@localhost test]# myloader -u root -p wsyht -B test -o -d /data/backup/test/ 


4、恢复指定目录的库

   说明:

   即一个目录备份了多个库,我不想恢复这个目录下的所有库,只想恢复这个目录下的一个库

   则需要加-s参数指定要恢复那个目录下的哪个库   

   [root@localhost test]# ls

   metadata                              mysql.plugin-schema.sql.gz

   mysql.columns_priv-schema.sql.gz      mysql.proc-schema.sql.gz

   mysql.db-schema.sql.gz                mysql.procs_priv-schema.sql.gz

   mysql.db.sql.gz                       mysql-schema-create.sql.gz

   mysql.event-schema.sql.gz             mysql.servers-schema.sql.gz

   mysql.func-schema.sql.gz              mysql.tables_priv-schema.sql.gz

   mysql.help_category-schema.sql.gz     mysql.time_zone_leap_second-schema.sql.gz

   mysql.help_category.sql.gz            mysql.time_zone_name-schema.sql.gz

   mysql.help_keyword-schema.sql.gz      mysql.time_zone-schema.sql.gz

   mysql.help_keyword.sql.gz             mysql.time_zone_transition-schema.sql.gz

   mysql.help_relation-schema.sql.gz     mysql.time_zone_transition_type-schema.sql.gz

   mysql.help_relation.sql.gz            mysql.user-schema.sql.gz

   mysql.help_topic-schema.sql.gz        mysql.user.sql.gz

   mysql.help_topic.sql.gz               test-schema-create.sql.gz

   mysql.host-schema.sql.gz              test.t1-schema.sql.gz

   mysql.ndb_binlog_index-schema.sql.gz  test.t1.sql.gz

   可看到上面有两种不同颜色的压缩包,即存了两个库在这个目录下

   [root@localhost test]# myloader -u root -p wsyht -B auth -s mysql -d /data/backup/test/

   [root@localhost test]# mysql -uroot -pwsyht -e"show databases;"                            +--------------------+

   | Database           |

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

   | information_schema |

   | auth               |

   | mysql              |

   | test               |

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

   [root@localhost test]# mysql -uroot -pwsyht -e"use auth;show tables;"

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

   | Tables_in_auth            |

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

   | columns_priv              |

   | db                        |

   | event                     |

   | func                      |

   | help_category             |

   | help_keyword              |

   | help_relation             |

   | help_topic                |

   | host                      |

   | ndb_binlog_index          |

   | plugin                    |

   | proc                      |

   | procs_priv                |

   | servers                   |

   | tables_priv               |

   | time_zone                 |

   | time_zone_leap_second     |

   | time_zone_name            |

   | time_zone_transition      |

   | time_zone_transition_type |

   | user                      |

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

   可看到上面已经把备份的库导进新库auth里面

   注:如果上面不加 -s 参数指定需要导入该目录的哪个库,则会两个库都导进auth库

       如果 -s -B 两个参数都不加,则会默认导入之前原来导出的那个库

       则从test库导出来的库,会再导进test库,从mysql库导出来的会再导进mysql库


最后再啰嗦两句,总结一下:

     库存在,导进没影响,库不存在,也不需要事先创建,因为当时备份库的时候也一起把建库  语句也备份了,更方便的和神奇是,你加-B参数随便起一个库名,导数据的时候,他也可以帮你  建好该库,然后导数据,但如果表存在的话,则需加-o参数,他会帮自已帮你删了表然后再继续  导,而不需要我们手动去删库删表再导,而且使用多线程导入速度杠杠的,是不是觉得减轻了我  们许多工作,并且提高了我们运维不少的工作效率,哈哈!!