mysql中mydumper 和 mysqldump 对比使用
如果只是备份几张表或单个库,相比innobackup而言,mysqldump和mydumper更为方便,不过mydumper增加了相对较多的特性,比如多线程备份,正则匹配备份,分组和自检等功能.另外mydumper和mysqldump本质上是一样的导出逻辑数据,不支持在线热备innodb.当然我们也可以使用innobackup备份部分表数据,但是它和mydumper和mysqldump不是一类备份方式,所以下文只测试mydumper和mysqldump之间的使用.
mydumper导出
使用mydumper工具以8个线程导出test(9.4G)的数据,并压缩,如下所示:
mydumper-Btest--regex'test.*'-c-e-G-E-R--use-savepoints-h10.0.21.5-uroot-P3301-pxxxxxx-t8-o/data/mysql_bak/
在目录/data/mysql_bak里,库中的每个表都保存为表定义和数据两个文件.
整体执行时间如下,一共耗时123s
#catmetadata Starteddumpat:2017-05-1910:48:00 SHOWMASTERSTATUS: Log:mysql-bin.000406 Pos:2165426 GTID:(null) SHOWSLAVESTATUS: Host:10.144.127.4 Log:mysql-bin.000419 Pos:506000361 GTID:(null) Finisheddumpat:2017-05-1910:50:03
mysqldump导出
使用默认的mysqldump工具导出该库并压缩,如下所示:
#timemysqldump-Btest-E-R-h10.0.21.5-uroot-P3301-p|gzip>/data/test.sql.gz Enterpassword: real3m19.805s user4m47.334s sys0m10.395s
real一行显示mysqldump整个运行的时间为199.8s
总结
整体上看,由于数据不多,mysqldump和mydumper时间相差并不大,大多的时间都消耗在数据传输层面,如果库足够大的话,mydumper的优势就能体现出来.另外低版本的mydumper由于高版本MySQL语法的变更,会存在导出错误的问题,比如出现下面错误:
**(mydumper:18758):CRITICAL**:Couldn'texecute'SETOPTIONSQL_QUOTE_SHOW_CREATE=1':YouhaveanerrorinyourSQLsyntax; checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'OPTIONSQL_QUOTE_SHOW_CREATE=1' atline1(1064)
处理这种问题可以使用高版本的mydumper,如果高版本还有这个问题可以参考github官方代码做相应代码修改.