./mydumper -u root -p 123456 -h 192.168.200.25 -P 3306 -m -c -b --regex=tmp.* -B test -o /home/linuxidc/bak/ drwx------ 2 linuxidc linuxidc 4.0K 2013-11-14 21:16 binlog_snapshot -rw-rw-r-- 1 linuxidc linuxidc 133 2013-11-14 21:16 metadata -rw-rw-r-- 1 linuxidc linuxidc 94K 2013-11-14 21:16 test.tmp_0808.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 75K 2013-11-14 21:16 test.tmp_0809.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 25K 2013-11-14 21:16 test.tmp_0813.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 208K 2013-11-14 21:16 test.tmp_0826.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 915 2013-11-14 21:16 test.tmp_0827.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 901 2013-11-14 21:16 test.tmp_0912.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 2.1K 2013-11-14 21:16 test.tmp_0916.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 622K 2013-11-14 21:16 test.tmp_0918_a.sql.gz -rw-rw-r-- 1 linuxidc linuxidc 28M 2013-11-14 21:16 test.tmp_0918_ff.sql.gz
如上所示,备份文件已经是压缩的了(用gzip -d 解压),并且备份出了tmp.*匹配出来的所有表,二进制日志也被备份到了binlog_snapshot文件中,并且也是被压缩的。
###更新(2016-04-01)###
新版本里已经不能备份binlog了,没有-b参数。这里说明下备份指定数据库的方法:--regex 正则匹配
#指定备份数据库:备份abc、bcd、cde mydumper -u backup -p 123456 -h 192.168.180.13 -P 3306 -t 3 -c -l 3600 -s 10000000 -e --regex 'abc|bcd|cde' -o bbb/ #指定不备份的数据库:不备份abc、mysql、test,备份其他数据库 mydumper -u backup -p 123456 -h 192.168.180.13 -P 3306 -t 3 -c -l 3600 -s 10000000 -e --regex '^(?!(abc|mysql|test))' -o bbb/
3)还原,表存在先删除(-o):这里需要注意,使用该参数,备份目录里面需要有表结构的备份文件。
./myloader -u root -p 123456 -h 192.168.200.25 -P 3306 -o -B test -d /home/linuxidc/bak/
更多的参数效果,请自己测试。
最后测试:用mysqldump和mydumper进行对比测试。
#!/usr/bin/env Python #coding=utf-8 import MySQLdb import os import sys import time backup = os.system('') def mysqldump_data(): t1 = time.time() backup = os.system('mysqldump --no-defaults -uroot -p123456 -h192.168.200.25 --default-character-set=utf8 test > /home/linuxidc/test.bak') t2 = time.time() t = round(t2-t1) print "mysqldump Cost Time %s" %t def mydumper_data(): t1 = time.time() backup = os.system('mydumper -u root -p 123456 -h 192.168.200.25 -P 3306 -B test -o /home/linuxidc/bak/') t2 = time.time() t = round(t2-t1) print "mydumper Cost Time %s" %t if __name__ =='__main__': mysqldump_data() mydumper_data()
View Code测试了2个数据库:
1:
mysqldump Cost Time :162s
mydumper Cost Time :61s
2:
mysqldump Cost Time :483s
mydumper Cost Time :337s
从上面的时间来看,mydumper 确实提升了备份数据,还原也同理。
###### 2016-07-20 更新 #######
mydumper支持一张表多个线程以chunk的方式批量导出,参数-r:试图用行块来分割表,该参数关闭--chunk-filesize参数。如: